3

I have a custom payment method, after successful payment; payment page return to a controller where it updates order status and truncate current cart items like this:

$this->quote->load($orders->getQuoteId());

$this->quote->setReservedOrderId(null);
$this->quote->setIsActive(true);
$this->quote->removePayment();
$this->quote->save();

$this->cart->truncate();
$this->cart->saveQuote();

Where $this->quote is object of Magento\Quote\Model\Quote
and $this->cart is object of Magento\Checkout\Model\Cart

The cart is truncating properly, but the cart summery count is still appearing on header, and when I go to view cart, it is showing empty cart with previous order total, as shown in image below

enter image description here

My question is, how can I fully empty my cart data after successful payment?

4
  • do you want to update summary section, right? Apr 30 '19 at 12:37
  • summery would also the part, I want to clear all data related to cart Apr 30 '19 at 12:42
  • Did you get a solution? May 2 '19 at 9:18
  • Not yet, will try your code. I will let you know in a while. Thanks for the answer :) May 2 '19 at 9:18
1

You may try to use checkout session Model to clear quote data (i.e Magento\Checkout\Model\Session.php ).

Update your payment module controller code as follow.

I assume your custom payment module controller file name is MypaymentController.php

classs MypaymentController    extends \Magento\Framework\App\Action\Action
{

    /**
     * @var \Magento\Checkout\Model\Session
     */
    private $checkoutSession;


      public function __construct(
        ........................
        ........................
        SessionManagerInterface $checkoutSession,
        ........................
        ........................
      ){

        ........................
        $this->checkoutSession = $checkoutSession;
        ........................
      }



    public function execute()
    {
       ........................
       $this->_checkoutSession->clearQuote();
       $this->_checkoutSession->clearStorage();
       $this->_checkoutSession->restoreQuote();
       ........................

    }    

}

** Note:**

If your payment module controller already injected the Checkout Session Model (i.e \Magento\Checkout\Model\Session) then do not reinject Session Model, just try to use the functions below in your controller code block.

$this->_checkoutSession->clearQuote();
$this->_checkoutSession->clearStorage();
$this->_checkoutSession->restoreQuote();
5
  • Thanks for the answer :) I will try this, will let you know Apr 30 '19 at 12:43
  • Still facing same issue :( Apr 30 '19 at 12:49
  • if possible could you please provide full code of your payment controller? Apr 30 '19 at 13:05
  • I have shared main parts, that controller has too many stuff with a lot of "if", I have shared relevant parts Apr 30 '19 at 16:37
  • 1
    there was a code that was effecting was this $quote->setReservedOrderId(null); $quote->setIsActive(true); $quote->removePayment();$quote->save(); so I have removed it and add your code $this->checkoutSession->clearQuote(); now it's working fine. Thanks :) May 2 '19 at 12:48
2

You need to do following things.

  1. create sections.xml at the following location with the code.

app\code\Vendor\Extension\etc\frontend\sections.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd">
    <action name="module/controller/action">
        <section name="cart"/>
        <section name="checkout-data"/>
    </action>
</config>

NOTE : replace module/controller/action with your above controller action path.

9
  • I don't get it, did you read the question? just asking, because I think you gave me answer to something else :) Apr 30 '19 at 16:33
  • @ShoaibMunir Just check answer what I give, your controller action clear the cart but summary section have issue, Magento 2 have facility to update particular section. So try the code. May 1 '19 at 4:17
  • sure, will try it. I will let you know. Thanks May 1 '19 at 11:18
  • I have tried your code, but it didn't work for me :( May 2 '19 at 6:24
  • ok confimm you implement code properly and run all the magento commands after change and then check into private browser mode. May 2 '19 at 6:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.