Magento 2 - Корзина пуста после успешной оплаты


У меня есть пользовательский способ оплаты, после успешной оплаты; страница оплаты возвращается контроллеру, где она обновляет статус заказа и обрезает текущие товары в корзине следующим образом:

$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();

Где $this->quote - объект Magento\Quote\Model\Quote
и $this->cart является объектом Magento\Checkout\Model\Cart

Корзина усекается правильно, но в заголовке по-прежнему отображается количество летних корзин, и когда я перехожу к просмотру корзины, она показывает пустую корзину с общим количеством предыдущих заказов, как показано на рисунке ниже

enter image description here

Мой вопрос в том, как я могу полностью очистить данные своей корзины после успешной оплаты?

Author: Shoaib Munir, 2019-04-30

3 answers

Вы можете попробовать использовать модель сеанса оформления заказа для очистки данных котировок (т.е. Magento\Checkout\Model\Session.php ).

Обновите код контроллера платежного модуля следующим образом.

Я предполагаю, что имя файла контроллера пользовательского платежного модуля 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();
       ........................

    }    

}

** Примечание: **

Если контроллер вашего платежного модуля уже внедрил модель сеанса оформления заказа (т.е. \ Magento\Оформление заказа\Модель\Сеанс) тогда не делай повторно вставьте модель сеанса, просто попробуйте использовать функции, приведенные ниже, в блоке кода контроллера.

$this->_checkoutSession->clearQuote();
$this->_checkoutSession->clearStorage();
$this->_checkoutSession->restoreQuote();
 1
Author: Pritam Info 24, 2019-04-30 12:42:16

Вам нужно сделать следующие вещи.

  1. создайте sections.xml в следующем месте с кодом.

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>

ПРИМЕЧАНИЕ: замените module/controller/action указанным выше путем действия контроллера.

 1
Author: Dhiren Vasoya, 2019-04-30 14:15:07

Попробуйте с помощью метода Delete() удалить цитату

$quote = $this->_customerSession->getCustomer()->getQuote()->getCollection();
$quote->delete();
 1
Author: Arunprabakaran M, 2019-05-02 08:48:12