我希望能够允许用户在结帐时选择某个选项, 然后他们将被重定向到他们使用他们的信用信息支付的银行页面, 然后重定向回magento并将订单设置为成功批准或如果不是
则失败我一直在用magento的代码乱搞几天, 我能够通过单页控制器“破解”重定向,然后回来, 但我无法将订单状态从该控制器更改为“已批准”
我在'saveorder action'中在控制器中基本上做了什么: - 检查用户选择的付款方式 - 如果是我需要的那个,请将用户发送到要支付金额的银行页面 - 然后从该页面返回到检查返回状态的php页面,如果成功重定向到onepage / success /,如果没有,则重定向到onepage / failure
一切都很好但是我怎样才能改变订单状态?
我尝试了这个链接中的内容,但这只适用于旧版本的Magento http://blog.chapagain.com.np/magento-how-to-change-order-status-programmatically/
感谢
答案 0 :(得分:2)
请注意,成功页面不一定会将付款状态更改为已批准。这是因为不同的付款方式可能会在不同时间批准付款。例如,Paypal在有机会处理之前不会批准付款。
您的CC公司是否提供可用于更新状态的回调?如果是这样,我建议使用Paypal模块作为模板来处理这个问题(等待回调,更新订单状态)。如果没有,也许可以使用cronjob及其API来检查付款状态。
总的来说,不要依赖客户在付款后访问某个页面,因为在很多情况下情况并非如此。
希望有所帮助!
谢谢, 乔
答案 1 :(得分:2)
我从paypal支付成功后解决了这个问题。您可以将订单状态流程更改为可下载产品,
转到app\code\core\Mage\paypal\controllers\StandardController.php
并在付款后用我的代码发送邮件成功和订单状态替换代码。
public function successAction()
{
$session = Mage::getSingleton('checkout/session');
$session->setQuoteId($session->getPaypalStandardQuoteId(true));
Mage::getSingleton('checkout/session')->getQuote()->setIsActive(false)->save();
$session->setPaypalStandardQuoteId($session->getQuoteId());
$order = Mage::getModel('sales/order');
$order->load(Mage::getSingleton('checkout/session')->getLastOrderId());
$state = Mage_Sales_Model_Order::STATE_PROCESSING;
$order->setState($state);
$order->setStatus('processing');
$order->sendNewOrderEmail();
$order->save();
$this->_redirect('checkout/onepage/success', array('_secure'=>true));
}
答案 2 :(得分:1)
更改订单状态(magento 1.5)
$order->setStatus(Mage_Sales_Model_Order::STATE_COMPLETE);
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE);
$order->save();