M2支付失败还原购物车
M2支付失败还原购物车
在支付失败控制器中 重新激活购物车,并删除支付方式和保留订单ID并重复使用它;
/**
* 重写MagentoCheckoutControllerOnepageFailure
*/
public function execute()
{
$lastQuoteId = $this->getOnepage()->getCheckout()->getLastQuoteId();
$lastOrderId = $this->getOnepage()->getCheckout()->getLastOrderId();
if (!$lastQuoteId || !$lastOrderId) {
return $this->resultRedirectFactory->create()->setPath('checkout/cart');
}
$this->addOldCart();
return $this->resultPageFactory->create();
}
protected function addOldCart()
{
$objectManager = MagentoFrameworkAppObjectManager::getInstance();
$quote = $objectManager->create('MagentoQuoteModelQuoteFactory')->create()->load($this->getOnepage()->getCheckout()->getLastQuoteId());
$this->_registry->register('reserved_order_id', $quote->getReservedOrderId());
$quote->setReservedOrderId(null);
$quote->setIsActive(true);
$quote->removePayment();
$quote->save();
$this->checkoutSession->replaceQuote($quote);
$this->cart->setQuote($quote);
$this->checkoutSession->restoreQuote();
}
在FPC缓存开启的情况下还原购物车可能失败,需要禁用FPC缓存
