即使 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 网站付款专业版错误

Magento PayPal 付款缺少运费......但只是有时

当付款通过PayPal进入时,如何阻止magento将付款状态设置为“已完成”

Magento - 在结帐页面注册,然后通过 PayPal 付款

Magento 在贝宝付款前下订单