Magento2 checkout/onepage/success redirects to cart

Look very carefully to your var/log/system.log.

In my case, I was missing some important information there and the problem was Redis. The session was being locked by some other process and didn't allow Magento to update the cart/quote session there.

I just noticed that when added a breakpoint to \Magento\Checkout\Controller\Onepage\Success::execute and looking at my tail -f var/log/* terminal tab.

Update: I faced the problem again and Redis config was the problem. I just changed the break_after_frontend from 5 to 15 in app/etc/env.php as I described here. It worked for me.


I found a solution.

The problem was that

$this->checkoutSession->getLastSuccessQuoteId()
$this->checkoutSession->getLastQuoteId()
this->checkoutSession->getLastOrderId()

Somehow were lost before paypal redirects to /checkout/onepage/success.

When the order is created, I pass the id of the order to the /checkout/onepage/success. Than I:

$this->checkoutSession->setLastSuccessQuoteId(order->getQouteId())
$this->checkoutSession->setLastQuoteId(order->getQouteId())
this->checkoutSession->setLastOrderId(order->getEntityId())

At this point, everything works fine.


This was with us after the PayPalPlus order, because of the static block in the email template.

instead of this in email template:

{{block cacheable="false" id="terms"}} <!-- cacheable not working -->

I created sales_email_order_terms.xml in Custom_Theme/Magento_Sales/layout.

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd" label="Email Terms" design_abstraction="custom">
    <body>
        <block class="Magento\Cms\Block\Block" name="block_email_terms" cacheable="false">
            <arguments>
                <argument name="block_id" xsi:type="string">terms</argument>
            </arguments>
        </block>
    </body>
</page>

and then use in email template:

{{layout handle="sales_email_order_terms"}}