即使 PayPal 付款失败,Magento 订单状态也会更新为“处理中”
Posted
技术标签:
【中文标题】即使 PayPal 付款失败,Magento 订单状态也会更新为“处理中”【英文标题】:Magento order status updated to "Processing" even when PayPal payment fails 【发布时间】:2015-09-05 08:16:42 【问题描述】:我对 Magento 1.9 和 PayPal 付款方式有疑问。 当客户使用 PayPal 付款并进行付款审核时,在这种情况下订单状态将设置为正确的“付款审核”。
但是,问题是,在付款实际失败的情况下(即客户账户中的资金不足),Magento 会将订单状态更新为“处理中”,客户最终会获得免费商品。
我需要做的是,当调用此类“失败”IPN 时,我需要将“已关闭”状态设置为该特定订单。我花了超过 4 个小时才找到解决方案,但没有找到任何合适的解决方案。
如果有人对此有任何修复,请与我分享。
PayPal IPN 响应变量:
[payer_email] => xxx@xxx.com
[payer_id] => xxxxxxxxxxxx
[payer_status] => unverified
[payment_date] => 14:33:46 Jun 08, 2015 PDT
[payment_gross] => 43.24
[payment_status] => Failed
[payment_type] => echeck
[protection_eligibility] => Ineligible
提前致谢。
【问题讨论】:
我们也看到了这种行为。你找到解决办法了吗? 不,我还没有找到任何解决方案,仍在挖掘根本原因。 我们也遇到同样的错误,你找到解决办法了吗? @hakkim,这是一个不常见的问题,所以不知道背后的主要原因。 对我来说这很频繁.. 似乎是一种新的头痛... :( 【参考方案1】:我们遇到了同样的问题,并找到了它的根本原因。这似乎是 Magento Bug Tracker 上的一个未解决问题。
见https://www.magentocommerce.com/bug-tracking/issue/index/id/1041
您可以通过如下重写 Ipn 模型来修复它:
<?php
/**
* Rewrite the core fix an issue with IPN notifications of "failed" payments
*/
class Magento_CoreFixes_Model_Paypal_Ipn extends Mage_Paypal_Model_Ipn
/**
* @see https://www.magentocommerce.com/bug-tracking/issue/index/id/1041
*/
protected function _registerPaymentFailure()
$this->_importPaymentInformation();
// This is the fix allowing order to get the cancelled status
foreach ($this->_order->getInvoiceCollection() as $invoice)
$invoice->cancel()->save();
$this->_order
->registerCancellation($this->_createIpnComment(''), false)
->save();
希望对你有帮助!
【讨论】:
【参考方案2】:Pierre MARTIN's answer 直接引导我找到了这个问题的根源,并使其修复起来很简单。
我已将该修复程序打包到一个模块中,该模块可以轻松安装到任何商店中。你可以找到the source and installation instructions on GitHub
发生这种情况是因为,如果订单有未取消的发票,对 registerCancellation()
的调用会引发异常。异常意味着状态永远不会改变,默认为“处理中”。
【讨论】:
以上是关于即使 PayPal 付款失败,Magento 订单状态也会更新为“处理中”的主要内容,如果未能解决你的问题,请参考以下文章
Magento + Paypal - 订单状态停留在“付款审查”
Magento PayPal 付款缺少运费......但只是有时
当付款通过PayPal进入时,如何阻止magento将付款状态设置为“已完成”