Magento订单状态更新为" Processing"即使PayPal付款失败

时间:2015-06-19 11:05:21

标签: php paypal paypal-ipn payment-gateway magento-1.9

我遇到了Magento 1.9和PayPal付款方式的问题。 当客户使用PayPal付款并且有付款审核时,在这种情况下订单状态的订单将被设置为"付款审核"这是正确的。

然而,问题是,在付款实际失败的情况下(即客户账户中的资金不足),Magento将订单状态更新为" Processing" &安培;客户最终获得免费商品。

我需要做的是,当这样的"失败"调用IPN我需要设置"已关闭"该特定订单的状态。我花了4个多小时才找到解决方案,但没有找到任何合适的解决方案。

如果有人对此有任何疑问,请与我分享。

enter image description here

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

提前致谢。

2 个答案:

答案 0 :(得分:4)

我们遇到了同样的问题并找到了它的根本原因。它似乎是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();
    }
}

希望它有所帮助!

答案 1 :(得分:0)

Pierre MARTIN's answer让我直接找到了这个问题的根源,并且解决了这个问题。

我把这个修复程序包装到一个可以轻松安装到任何商店的模块中。您可以找到the source and installation instructions on GitHub

这是因为,如果订单有未开发票,则对registerCancellation()的调用会引发异常。异常意味着状态永远不会改变,默认为“处理”。