magento 将结帐付款重定向到第三方网关
Posted
技术标签:
【中文标题】magento 将结帐付款重定向到第三方网关【英文标题】:magento redirect checkout payment to a 3rd party gateway 【发布时间】:2011-08-09 09:02:23 【问题描述】:我希望能够允许用户在结帐时选择某个选项, 然后他们将被重定向到他们使用信用信息付款的银行页面, 然后重定向回magento并将订单设置为成功或失败,否则失败
这几天我一直在搞乱magento的代码, 我能够通过 onepage 控制器“破解”进行重定向,然后返回, 但我无法从该控制器将订单状态更改为“已批准”
我在“保存订单操作”中的控制器中所做的基本上是: - 检查用户选择的付款方式 - 如果是我需要的,请将用户发送到银行页面并附上要支付的金额 - 然后从该页面返回到检查返回状态的 php 页面,如果成功重定向到 onepage/success/,如果不成功,则重定向到 onepage/failure
这一切都很好,但我怎样才能改变订单状态?
我尝试了此链接中的内容,但这似乎仅适用于旧版本的 Magento http://blog.chapagain.com.np/magento-how-to-change-order-status-programmatically/
谢谢
【问题讨论】:
顺便说一句 - 您可能会发现 Magento 的 BlueSnap 集成对您的需求很有用,您可以在此链接中查看详细信息:support.bluesnap.com/docs/magento-2 【参考方案1】:请记住,成功页面并不一定会将付款状态更改为已批准。这是因为不同的付款方式可能会在不同的时间批准付款。例如,Paypal 在有机会处理付款之前不会批准付款。
您的 CC 公司是否提供可用于更新状态的回调?如果是这样,我建议使用 Paypal 模块作为如何处理此问题的模板(等待回调,更新订单状态)。如果没有,也许可以使用 cronjob 及其 API 来检查付款状态。
总体而言,不要依赖客户在付款后访问某个页面,因为很多情况并非如此。
希望有帮助!
谢谢, 乔
【讨论】:
啊,太好了,感谢您的提示...并没有真正考虑过,它会发回我目前正在使用的回调我对 mage/zend/magento 非常陌生,所以我尝试了搞乱了贝宝模块,但不知道它是如何工作的,也无法让它做我想做的事……尽管我有不错的 php 经验,但我可以使用任何提示或链接吗? Magento 如果您是新手,它有点像野兽。实际 Magento 网站上的教程涵盖了很多主题,但很难指出整个 Paypal 订单生命周期如何发生的单一概述。如果您有特定的代码问题,请搜索本网站上已回答的问题或发布新问题,并且有很多人很乐意提供帮助。【参考方案2】:我从贝宝付款成功后解决了这个问题。您可以将订单状态更改为可下载的产品,
转到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));
【讨论】:
嗨 Thomas,这看起来不像是最佳实践,这段代码 $order->load(Mage::getSingleton('checkout/session')->getLastOrderId());如果多个客户在您从银行网站返回之前结帐怎么办,这将给出错误的 LastOrderId【参考方案3】:更改订单状态(magento 1.5)
$order->setStatus(Mage_Sales_Model_Order::STATE_COMPLETE);
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE);
$order->save();
【讨论】:
啊,我用的是这个:$order->setStatus('complete'); $订单->保存();它工作正常,但是在管理员的订单详细信息中,“cmets 历史记录”部分仍然显示“处理中”,即使订单状态本身已更改为完成我尝试了您的代码,肯定是进度,我曾经得到一个我不能的错误手动更改状态,但现在我得到了这个:请检查送货地址信息,输入名字,姓氏,街道......等(所有地址信息)我正在以访客身份结账 我正在加载这样的订单: $order = Mage::getModel('sales/order')->load($lastOrderId);以上是关于magento 将结帐付款重定向到第三方网关的主要内容,如果未能解决你的问题,请参考以下文章