在付款确认前停止Magento清空购物车?
这是自从我开始为我的网上商店测试Magento后发现的最重要的问题之一。在付款确认前,清空购物车是很不必要的,也是有害的,因为不幸的是,Magento会这么做。在付款确认前停止Magento清空购物车?
如果用户无需支付的付款方式,由于某种原因,点击选择贝宝(网页标准)“回到XXXX”(在贝宝商户名称)支付宝付款页面上,贝宝将用户重定向回http://www.example.com/checkout/cart/,现在是EMPTY购物车。
我认为这应该是在付款确认/ PayPal IPN之后,购物车是空白的,而不是之前的任何一点。
即使用户想再次继续,他或她会因搜索并重新添加所有产品而感到不适,并且很可能会离开。
任何想法如何解决这个问题?
你的问题是Mage_Checkout_OnepageController::saveOrderAction()
的行为方式。
更具体:开放app/code/core/Mage/Checkout/controllers/OnepageController.php
$this->getOnepage()->getQuote()->save();//this makes the cart empty (sets the quote as converted to order)
if (isset($redirectUrl)) {
$result['redirect'] = $redirectUrl;
}
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
可以更换的最后一部分:
$this->getOnepage()->getQuote()->save();//....
有:
if (isset($redirectUrl)) {
$result['redirect'] = $redirectUrl;
$this->getOnepage()->getQuote()->setIsActive(1) ;
}
$this->getOnepage()->getQuote()->save();
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
这是什么文件? – 2015-05-10 12:07:07
@AryehArmon,我已插入此文件的路径。检查一次。 – 2016-07-27 10:29:46
这为我工作:
文件: ~/app/code/core/Mage/Checkout/controllers/OnepageController.php
替换此:
$this->getOnepage()->getQuote()->save();
/**
* when there is redirect to third party, we don't want to save order yet.
* we will save the order in return action.
*/
if (isset($redirectUrl)) {
$result['redirect'] = $redirectUrl;
}
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
有了这一个:
/**
* when there is redirect to third party, we don't want to save order yet.
* we will save the order in return action.
*/
if (isset($redirectUrl)) {
$result['redirect'] = $redirectUrl;
$this->getOnepage()->getQuote()->setIsActive(1) ;
}
$this->getOnepage()->getQuote()->save();
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
核心文件不应该改变。你应该总是重写控制器。 – Sarvagya 2016-01-04 12:07:04
我正在使用IWD onepage结帐。这段代码不适合我。 PLZ告诉如何做到这一点? – 2016-08-11 06:52:47
请检查一次http://magento.stackexchange.com/questions/130941/cart-becomes-empty-when-cancel-the-transaction-in-onestep-checkout – 2016-08-11 07:10:30
贝宝我发现的应用程序/代码/芯内部的取消动作/法师/贝宝/控制器/ StandardController.php cancelAction
我改变了这样的代码取消动作
public function cancelAction()
{
$session = Mage::getSingleton('checkout/session');
$cart = Mage::getSingleton('checkout/cart');
$session->setQuoteId($session->getPaypalStandardQuoteId(true));
if ($session->getLastRealOrderId()) {
$incrementId = $session->getLastRealOrderId();
if (empty($incrementId)) {
$session->addError($this->__('Your payment failed, Please try again later'));
$this->_redirect('checkout/cart');
return;
}
$order = Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());
$session->getQuote()->setIsActive(false)->save();
$session->clear();
try {
$order->setActionFlag(Mage_Sales_Model_Order::ACTION_FLAG_CANCEL, true);
$order->cancel()->save();
} catch (Mage_Core_Exception $e) {
Mage::logException($e);
}
$items = $order->getItemsCollection();
foreach ($items as $item) {
try {
$cart->addOrderItem($item);
} catch (Mage_Core_Exception $e) {
$session->addError($this->__($e->getMessage()));
Mage::logException($e);
continue;
}
}
$cart->save();
$session->addError($this->__('Your payment failed. Please try again later'));
}
$this->_redirect('checkout/cart');
}
它对我来说非常好,而且没有必要为此改变任何其他地方。
它将当前订单标记为已取消,并使用该订单恢复购物车并将用户重新导向购物车。
谢谢.. !!这是很好的解决方案.. – 2016-03-03 12:51:49
由于Magento的版本1.6.0.0(炬力2011)可以启用“永久购物车”
下
System > Configuration > Customers > Persistent Shopping Cart
这应该解决这个问题。
使用这些设置,使其工作
Enable Persistence = Yes
Persistence Lifetime (seconds) = 31536000
Enable "Remember Me" = Yes
"Remember Me" Default Value = Yes
Clear Persistence on Log Out = No
Persist Shopping Cart = Yes
祝你好运:)
但是这个购物车在结帐时也没有清空吗? (点击PAY并转到PSP页面) – 2015-12-19 14:35:21
/app/code/core/Mage/Checkout/controllers/OnepageController.php这个文件是实际控制文件,但在付款方式扩展取决于涨它就会与命名空间更改/ MODULENAME /结帐/控制器/ OnepageController.php
查找功能saveOrderAction()
发现这些线路
$this->getOnepage()->getQuote()->save();
/**
* when there is redirect to third party, we don't want to save order yet.
* we will save the order in return action.
*/
if (isset($redirectUrl)) {
$result['redirect'] = $redirectUrl;
}
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
评论这条线//$this->getOnepage()->getQuote()->save();
并添加以下代码,如果条件中这样的情况会像..
//$this->getOnepage()->getQuote()->save();
if (isset($redirectUrl)) {
$result['redirect'] = $redirectUrl;
$this->getOnepage()->getQuote()->setIsActive(1) ;
}
$this->getOnepage()->getQuote()->save();
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
这是我与第三方支付延期完成。
嘿,你能否确认下面哪个解决方案适合你,因为它会帮助像我这样的其他人测试并获得解决方法。谢谢 – echoashu 2014-09-15 10:33:20
@echoashu,尝试了所有这些,但没有为我工作。 – 2015-11-24 01:46:00
@echoashu,对我来说也没有工作。我正在使用onepage结帐。 – 2016-08-11 07:11:50