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 将结帐付款重定向到第三方网关的主要内容,如果未能解决你的问题,请参考以下文章

Magento 付款重定向订单

在重定向到基于表单的支付网关之前/之后处理订单

Magento 2.3.3 - 结帐成功重定向到购物车

Magento Paypal 下订单但重定向不正确

Magento - 自动重定向到配置的支付网关之一

贝宝定期付款重定向到贝宝的主页