[英]Empty cart on Payment cancle or failure in Magento 1.9
When I place order on my store then I choose third party payment option like payumoney or paytm. 当我在商店下订单时,我会选择第三方付款方式,例如payumoney或paytm。 Then I cancle or failure order then redirect to my cart page but cart is empty. 然后我取消订单或失败订单,然后重定向到我的购物车页面,但购物车为空。
I want to products in the cart which i added before payment. 我要购买我在付款前添加的购物车中的产品。 Please give me solution. 请给我解决方法。
Thanks in advance. 提前致谢。
class Mage_Payment_Model_Observer
{
/**
* Set forced canCreditmemo flag
*
* @param Varien_Event_Observer $observer
* @return Mage_Payment_Model_Observer
*/
public function salesOrderBeforeSave($observer)
{
$order = $observer->getEvent()->getOrder();
if ($order->getPayment()->getMethodInstance()->getCode() != 'free') {
return $this;
}
if ($order->canUnhold()) {
return $this;
}
if ($order->isCanceled() || $order->getState() === Mage_Sales_Model_Order::STATE_CLOSED) {
return $this;
}
/**
* Allow forced creditmemo just in case if it wasn't defined before
*/
if (!$order->hasForcedCanCreditmemo()) {
$order->setForcedCanCreditmemo(true);
}
return $this;
}
/**
* Collect buy request and set it as custom option
*
* Also sets the collected information and schedule as informational static options
*
* @param Varien_Event_Observer $observer
*/
public function prepareProductRecurringProfileOptions($observer)
{
$product = $observer->getEvent()->getProduct();
$buyRequest = $observer->getEvent()->getBuyRequest();
if (!$product->isRecurring()) {
return;
}
$profile = Mage::getModel('payment/recurring_profile')
->setLocale(Mage::app()->getLocale())
->setStore(Mage::app()->getStore())
->importBuyRequest($buyRequest)
->importProduct($product);
if (!$profile) {
return;
}
// add the start datetime as product custom option
$product->addCustomOption(Mage_Payment_Model_Recurring_Profile::PRODUCT_OPTIONS_KEY,
serialize(array('start_datetime' => $profile->getStartDatetime()))
);
// duplicate as 'additional_options' to render with the product statically
$infoOptions = array(array(
'label' => $profile->getFieldLabel('start_datetime'),
'value' => $profile->exportStartDatetime(true),
));
foreach ($profile->exportScheduleInfo() as $info) {
$infoOptions[] = array(
'label' => $info->getTitle(),
'value' => $info->getSchedule(),
);
}
$product->addCustomOption('additional_options', serialize($infoOptions));
}
/**
* Sets current instructions for bank transfer account
*
* @param Varien_Event_Observer $observer
* @return void
*/
public function beforeOrderPaymentSave(Varien_Event_Observer $observer)
{
/** @var Mage_Sales_Model_Order_Payment $payment */
$payment = $observer->getEvent()->getPayment();
if ($payment->getMethod() === Mage_Payment_Model_Method_Banktransfer::PAYMENT_METHOD_BANKTRANSFER_CODE) {
$payment->setAdditionalInformation('instructions',
$payment->getMethodInstance()->getInstructions());
}
}
/**
* Will veto the unassignment of the order status if it is currently configured in any of the payment method
* configurations.
*
* @param Varien_Event_Observer $observer
* @throws Mage_Core_Exception
*/
public function beforeSalesOrderStatusUnassign($observer)
{
$state = $observer->getEvent()->getState();
if ($state == Mage_Sales_Model_Order::STATE_NEW) {
$statusModel = $observer->getEvent()->getStatus();
$status = $statusModel->getStatus();
$used = 0;
$titles = array();
foreach (Mage::app()->getWebsites(true) as $website) {
$store = current($website->getStores()); // just need one store from each website
if (!$store) {
continue; // no store is associated with the website
}
foreach (Mage::helper('payment')->getPaymentMethods($store) as $value) {
if (isset($value['order_status']) && $value['order_status'] == $status && $value['active']) {
++$used;
// Remember the payment's information
$title = $value['title'];
$websiteName = $website->getName();
if (array_key_exists($title, $titles)) {
$titles[$title][] = $websiteName;
} else {
$titles[$title] = array($websiteName);
}
}
}
}
if ($used > 0) {
// build the error message, and throw it
$methods = '';
$spacer = '';
foreach ($titles as $key => $values) {
$methods = $methods . $spacer . $key . ' [' . join(', ', $values) . ']';
$spacer = ', ';
}
throw new Mage_Core_Exception(Mage::helper('sales')->__('Status "%s" cannot be unassigned. It is in used in %d payment method configuration(s): %s',
$statusModel->getLabel(), $used, $methods));
}
}
}
}
Since Magento version 1.6.0.0 (juli 2011) you can enable "Persistent Shopping Cart" under 从Magento 1.6.0.0版(2011年7月)开始,您可以在以下位置启用“永久购物车”
System > Configuration > Customers > Persistent Shopping Cart
This should solve this problem. 这样就可以解决这个问题。
Use these settings to make it work 使用这些设置使其正常工作
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.