php - Magento PayPal 重复发票错误

标签 php magento paypal

每隔一段时间,客户在尝试提交订单时会收到一条错误消息,显示 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() 方法中被覆盖。

显然,在第一次尝试之后,有些东西正在取消设置所有的值,但我不知道是什么或在哪里。如果有人有任何想法,我很乐意听取他们的意见!

最佳答案

  1. 登录您的 Paypal 账户
  2. 转到 Profile > Payment Receiving Preferences
  3. 阻止意外付款下选择否,允许每个发票 ID 多次付款

enter image description here

关于php - Magento PayPal 重复发票错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841936/

相关文章:

php - 检查多维数组的每个子数组是否包含元素

php - Magento RESTful API 用于将产品添加到购物车

php - Paypal返回值问题

paypal - 修改现有的 Paypal 配置文件经常到期日

php - Laravel 错误未捕获异常 'ReflectionException',消息为 'Class App\Http\Kernel does not exist'

php - 遍历对象数组

php - 在 PHP 中使用 SELECT 仅显示单行中的一个值的最安全、最正确的解决方案是什么?

Magento 和 Google 站点地图 - Cron

c# - GetExpressCheckoutDetails 在 asp.net 中返回 session 过期(10411 错误)(仅在某些计算机上)

php - 如何在输出中仅包含一次标题的情况下对连接表进行排序