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
Корзина усекается правильно, но в заголовке по-прежнему отображается количество летних корзин, и когда я перехожу к просмотру корзины, она показывает пустую корзину с общим количеством предыдущих заказов, как показано на рисунке ниже
Мой вопрос в том, как я могу полностью очистить данные своей корзины после успешной оплаты?
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();
Вам нужно сделать следующие вещи.
- создайте
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
указанным выше путем действия контроллера.
Попробуйте с помощью метода Delete() удалить цитату
$quote = $this->_customerSession->getCustomer()->getQuote()->getCollection();
$quote->delete();