magento order id increment jumps

Cab*_*ero 5 magento

由于某种原因,订单ID(sales_flat_order表上的increment_id)随后在我的Magento 1.6.1上没有递增.这是它如何照顾一些实时订单:

increment_id   created_at            updated_at
100000001      2011-12-14 12:35:24   2011-12-14 12:35:25
100000002      2011-12-14 13:02:39   2011-12-14 13:02:39
100000003      2011-12-14 13:04:18   2011-12-14 13:04:18
100000004      2012-02-01 16:54:58   2012-02-01 16:54:58
100000005      2012-03-14 12:22:35   2012-03-14 12:22:35
100000006      2012-03-20 13:10:48   2012-03-20 13:10:48
100000011      2012-03-29 20:58:48   2012-03-29 20:58:48
100000012      2012-03-29 21:06:43   2012-03-29 21:06:43
100000013      2012-03-30 10:48:20   2012-03-30 10:48:21
100000014      2012-03-30 13:05:40   2012-03-30 13:05:41
100000015      2012-04-03 15:51:01   2012-04-03 15:51:02
100000016      2012-04-19 15:00:49   2012-04-19 15:00:50
100000017      2012-05-09 12:09:21   2012-05-09 12:09:22
100000019      2012-05-24 05:35:35   2012-05-24 05:35:36
100000020      2012-05-24 05:41:11   2012-05-24 05:41:12
100000008      2012-05-24 05:48:52   2012-05-24 05:48:53
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么Magento有时会跳跃增量?更糟糕的是,在我的示例顺序中,增量100000008在100000020之后.有人知道为什么会发生这种情况并且有没有办法解决它?

Ros*_*ius 24

这是正常的,虽然可以理解为令人不安.

当Magento进入结账流程时,它会"保留"increment_id并将其放在报价(购物车)对象上.您可以在以下位置查看获取增量ID的代码:

Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
Run Code Online (Sandbox Code Playgroud)

每个商店的最后使用的ID存储在eav_entity_store中.如果客户在完成结账流程之前放弃了他们的购物车(即报价对象),则保留的increment_id将永远不会显示在订单上.您可以在繁忙的商店中看到订单号中的这种效果 - 偶尔会有一个非常古老的订单ID来自正在检查旧购物车的客户当天的订单.

此行为的存在是为了允许Magento在订单完成之前发送支付网关最终订单ID(increment_id),允许网关将订单ID与订单相关联.如果客户放弃了网关中的付款流程,则订单ID已死(或者更准确地仍附加到报价单).

您可以在PayPal Express模块​​中看到这种情况:

Mage_Paypal_Model_Express_Checkout::start()
Run Code Online (Sandbox Code Playgroud)

哪个叫

Mage_Sales_Model_Quote::reserveOrderId()
Run Code Online (Sandbox Code Playgroud)

如果要查找"缺失"的increment_ids,请查看字段reserved_order_id下的sales_flat_quote.您应该看到它们附加到未转换的引用对象(推车).

此行为可能会导致某些支付网关出现问题; 想起了Moneris.当您向Moneris的托管付款页发送两次相同的订单ID时,它会扼杀并为客户创建一个神秘的错误状态.当客户访问托管付费页面,退出并重新访问该页面时,会出现这种情况.因此,在某些情况下,有必要以编程方式重新生成与引用对象关联的订单ID.