Magento中的订单号有一个奇怪的问题。
最近,当在我的网站上下订单时100000350
,订单号是,理想情况下应该是100000370
我以前的订单号100000369
和100000367
。我已经附上了下面的截图
此外,我已经检查了错误日志,但没有找到任何条目。我们正在使用SagePay和PayPal作为其支付网关。
有人可以指导我吗?
Magento中的订单号有一个奇怪的问题。
最近,当在我的网站上下订单时100000350
,订单号是,理想情况下应该是100000370
我以前的订单号100000369
和100000367
。我已经附上了下面的截图
此外,我已经检查了错误日志,但没有找到任何条目。我们正在使用SagePay和PayPal作为其支付网关。
有人可以指导我吗?
Answers:
我第一次弄不清序列号,我们感到惊讶和沮丧,直到我弄清楚发生了什么。它与Magento如何分配销售订单编号有关。
像这样不按顺序排列,早于当前分配的编号并且使用一个月或更长时间是完全正常的。它的秘密在于,它是一个已登录的客户,在某个关键阶段之后没有完成订单,而是返回并登录并决定最终购买。
具有分配的销售订单编号的报价使用该编号作为销售订单编号。
现在进行解释。
Magento订单流程会在第一次将商品添加到购物车时创建报价。
此时,报价仅是潜在的销售订单。它没有分配的号码,因为客户尚未承诺付款。
当客户单击“ 继续”按钮进行结帐时,他们将:
接下来的一点很重要:选择在购物车中注册的客户将被视为来宾客户,直到订单完成并进入成功页面为止,此时将创建他们的帐户并登录。如果订单未完成并显示成功页面,则仍将保留来宾客户报价以及购物车会话超时丢失。
对于信用卡订单,单击“下订单”按钮时会发生以下情况。
sales_flat_quote
列中的表格reserved_order_id
)如果信用卡付款网关拒绝了任何客户的信用卡交易,并且下一位客户下达了成功的订单,则由于已为拒绝付款的销售订单分配了保留的销售订单编号,因此销售订单编号顺序将被跳过并为以下成功的销售订单分配下一个可用编号。
对于超过会话超时的来料车(来宾订单和在客户中的未成功注册),当会话期满时,此保留的销售订单号将丢失,从而在销售订单序列中留下空白。
对于在单击“ 继续”按钮之前登录的客户,报价被分配了一个客户ID,因此,如果他们尝试下订单并发现订单被拒绝,他们可以返回并登录,查找购物车中仍然有内容并放置订单,有时要晚得多(迄今为止最长为四个月)。报价将使用分配的保留的销售订单号,导致销售订单管理屏幕中显示的顺序不正确的销售订单号。
我面临着同样的问题,但是只有当服务器受到巨大负载时才被击中。发生此问题的原因是,在将报价转换为顺序时,db进入了锁定状态。经过进一步检查,我发现问题在于它试图在插入sales_flat_order表之后立即在事务内写入sales_flat_order_grid表。对于并发查询,它导致锁定冲突。真正的解决方案是将sales_flat_order_grid的内容移出事务。
该补丁为我解决了该问题。
您必须从Mage_Sales_Model_Abstract中删除函数_afterSave并添加
public function afterCommitCallback(){
if (!$this->getForceUpdateGridRecords()) {
$this->_getResource()->updateGridRecords($this->getId());
}
parent::afterCommitCallback();
}
让我知道它是否可以为您解决问题。
我不确定,但这可能会解决您的问题:
据我认为,可能是有些事情打扰了您的eav_entity_store
餐桌。它包含有关下一个递增ID(即order_id)的信息。可能是您的magento系统中的某些模块或代码已更改它。
打开此表,并使用您的上一个订单ID更新crement_last_id。请注意,它包含其他发票的增量ID,例如发票,货件等。可以肯定的是,只需到eav_entity_types
表中查看其 entity_type_id
用途sales/order
(列entity_model
)。在我的magento中,它的5。所以现在转到eav_entity_store
表,只需更新entity_type_id
为5的行的creation_id 。您可以直接通过phpmyadmin更新它,也可以运行查询,
update eav_entity_store set increment_last_id = 'your_last_order_id' where entity_type_id = 5;
请注意5是我的magento中的entity_type_id,用于订购
您的问题可能有很多原因,但我认为这可能会解决您的问题。