Drupal Commerce PayPal Express Checkout review and confirm step is skipped User is not seeing Confirm Order Page (Express Checkout review and confirm) during PayPal Express checkout.




  The EC module defines a new checkout page called Confirm order between the payment redirect and completion pages and a checkout pane called Express Checkout review and confirm that should only be used on this special page.


I am using 7.x-2.3 release of Commerce PayPal module. Testing with PayPal Sandbox accounts.

After logging into PayPal customer sees "continue" button and a message *"You're almost done. You will confirm your payment on **'s Test Store."*. After clicking "continue" customer is brought right to the Order Complete page and the payment is registered in the system. Which is not the intended behavior of PayPal EC module.

These are Order history messages that have been recorded during checkout with PayPal express: 

Status has been set to Checkout: Complete (previously: Checkout: Confirm order).
Status has been set to Checkout: Confirm order (previously: Checkout: Payment).
Payment of $62.00 submitted via PayPal Express Checkout.
Order has been paid in full.
Status has been set to Checkout: Payment (previously: Checkout: Review).
Status has been set to Checkout: Review (previously: Checkout: Checkout).
Status has been set to Checkout: Checkout (previously: Shopping cart).
Product sample2 added to the cart.
Order has been created.  

QUESTION: What could be the reason of why Express checkout review and confirm page is skipped?
The only code that would trigger a skip of the order confirmation page is in the checkout router hook implementation commerce_paypal_ec_commerce_checkout_router(). If you take a look at that, you'll see that it skips the confirmation page if the order either doesn't have a record in its data array that Express Checkout was used or if the customer used EC but did not use the EC flow (as opposed to the Mark flow, which is when the customer chooses PayPal from the payment method checkout pane and is then redirected to PayPal):

&lt;?php
  // If the current page is the Express Checkout page but the current order did
  // not use the Express Checkout flow...
  if ($checkout_page['page_id'] == 'paypal_ec' &amp;&amp;
    (empty($order-&gt;data['commerce_paypal_ec']['flow']) ||
     $order-&gt;data['commerce_paypal_ec']['flow'] != 'ec')) {
    // Update the order status to the next checkout page.
    // ...
  }
?&gt;


This means if it's being skipped for you, you should first ensure it's being skipped when the EC button is being used from the cart form (that's the EC flow) as opposed to when the customer redirects from inside the checkout form.

The second place to look will be the order's data array to figure it if / why the order doesn't have a record that it was paid for via EC.

If the module itself is to blame, please open a bug report explaining how to reproduce the issue. Last I used it, it was all working fine.