每隔一段时间,客户在尝试提交订单时会收到一条错误消息,显示 PayPal 网关已拒绝请求。由于提供了重复的发票 ID,交易被拒绝。 在深入研究之后,我相信我已经缩小了问题范围。在最近的案例中,一位客户在 4 个月前尝试下订单,但收到来自 PayPal 的内部错误。通过与 PayPal 的交谈,我得知该客户的信用卡已被标记。当他们尝试下第一个订单时,PayPal 拒绝了它,但仍然认为我们的 Magento 商店提供的发票 ID 是“已使用”。
快进到今天...同一位客户,新订单。 Magento 在 sales_flat_quote
表中仍然有 9 月份的旧报价。当他们登录时,它会加载客户报价(仍然有效)并尝试将其用于此订单。这导致了重复发票 ID 错误。
我在 Mage_Sales_Model_Observer 类中看到有一个从 cron 作业调用的 cleanExpiredQuotes
方法。但是,这只会影响“is_active”= 0 的引号。由于此引号被认为是活跃的,因此它从未被清除。
很明显,Magento 代码和 PayPal 之间存在脱节。但这就是我所了解的。还有其他人经历过吗?如果是这样,有什么建议吗?
编辑:
我已经深入了解了这一点。我已将代码添加到结帐 IndexController 以捕获错误,如果它是重复发票错误,它会取消设置引用中的 reserved_order_id 再次调用 saveOrderAction。这会导致报价保留一个新的订单 ID,然后将其提交给 PayPal。我现在遇到的问题是,当它第二次尝试使用新的发票编号时,所有总数均为 0。我尝试将 totals_collected_flag 设置为 false,以便重新收集总数,但是他们第二次总是 0。更具体地说,Mage_Sales_Model_Quote_Address 中的总数为 0,这是 Mage_Sales_Model_Order 最终使用的值。 Mage_Sales_Model_Quote 中的总数是正确的,但它们在报价的 collectTotals()
方法中被覆盖。
显然,在第一次尝试之后,有些东西正在取消设置所有的值,但我不知道是什么或在哪里。如果有人有任何想法,我很乐意听取他们的意见!
最佳答案
- 登录您的 Paypal 账户
- 转到 Profile > Payment Receiving Preferences
- 在阻止意外付款下选择否,允许每个发票 ID 多次付款
关于php - Magento PayPal 重复发票错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841936/