【发布时间】:2011-03-24 06:31:48
【问题描述】:
我的客户有一个销售电子产品的电子商务网站,在某些情况下,产品的销售次数超过了他们的库存。这是因为如果两个用户同时购买一个产品,而库存只剩下一个产品,一个会话在另一个会话开始之前没有完成将产品注册为售罄(所以它继续正常,认为有一个左)即使在流程开始时进行了检查。这显然会花费金钱(退款费用、退款等)并给消费者带来不便。
所以我想知道是否有办法解决这个问题?我想在流程开始时创建一个“标记”,即它会检查库存,如果售罄,它会标记产品,从而防止其他会话购买它。但这也产生了更多问题:如果客户方面发生某些事情会导致他们取消中间流程(断电等),那么即使产品被标记为已售出,它在结帐后实际上并没有售出过程没有完成。如果这种情况继续发生,就会出现产品库存过剩。其次,一个会话也可以在另一个会话将其标记为已售出时检查库存,因此即使第二个会话已经购买了它,第一个会话也会继续。这让我们回到了最初的问题。
我正在查看数据库端的表锁定,但我不确定这是否是最好的主意。任何建议将不胜感激!
谢谢, 迪普
【问题讨论】:
-
简单的解决方案,在付款时检查商品是否有货。 eBay 在即时付款上执行此操作,现在就购买,它说“在您付款之前,我们不会向您保证库存”,我说采用相同的解决方案。
-
在大多数消费者的心目中,他们在结账时点击提交按钮是“付费”的。在商品发货之前,我们实际上不会收费,但我们确实希望防止他们在没有库存时购买该商品。
-
"...在流程开始时检查到位。"。在我看来,当“他们在结帐时点击提交按钮”时,您需要进行额外的检查。 - 或者你已经这样做了吗?
标签: php database e-commerce race-condition payment-processing