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?

  • do you want to update summary section, right? – Dhiren Vasoya Apr 30 at 12:37
  • summery would also the part, I want to clear all data related to cart – Shoaib Munir Apr 30 at 12:42
  • Did you get a solution? – Arunprabakaran M May 2 at 9:18
  • Not yet, will try your code. I will let you know in a while. Thanks for the answer :) – Shoaib Munir May 2 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();
  • Thanks for the answer :) I will try this, will let you know – Shoaib Munir Apr 30 at 12:43
  • Still facing same issue :( – Shoaib Munir Apr 30 at 12:49
  • if possible could you please provide full code of your payment controller? – Pritam Info 24 Apr 30 at 13:05
  • I have shared main parts, that controller has too many stuff with a lot of "if", I have shared relevant parts – Shoaib Munir Apr 30 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 :) – Shoaib Munir May 2 at 12:48
1

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.

  • I don't get it, did you read the question? just asking, because I think you gave me answer to something else :) – Shoaib Munir Apr 30 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. – Dhiren Vasoya May 1 at 4:17
  • sure, will try it. I will let you know. Thanks – Shoaib Munir May 1 at 11:18
  • I have tried your code, but it didn't work for me :( – Shoaib Munir May 2 at 6:24
  • ok confimm you implement code properly and run all the magento commands after change and then check into private browser mode. – Dhiren Vasoya May 2 at 6:26
1

Try with Delete() method to delete a quote

$quote = $this->_customerSession->getCustomer()->getQuote()->getCollection();
$quote->delete();
  • getting this error PHP message: PHP Fatal error: Uncaught Error: Call to a member function getCollection() on null where $this->_customerSession is the object of Magento\Customer\Model\Session – Shoaib Munir May 2 at 9:28
  • Thanks for taking time answering my question. +1 for that :) – Shoaib Munir May 2 at 12:48

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.