编程语言
首页 > 编程语言> > php – 避免电子商务场景中的竞争条件

php – 避免电子商务场景中的竞争条件

作者:互联网

我的客户有一个销售电子产品的电子商务网站,并且有些情况下产品的销售次数超过了他们库存的次数.这是因为如果两个用户在库存中只剩下一个产品的同时购买产品,则一个会话在另一个会话开始之前没有完成将产品注销为售完(所以它继续正常,认为有一个左)即使在过程开始时有一个检查.这显然会花钱(退款费,退款等)和消费者的不便.

所以我想知道是否还有解决这个问题?我想在流程开始时创建一个“标记”,即它会检查库存,如果售罄,它会标记产品,从而阻止其他会话购买.但这也会产生更多问题:如果客户端发生某些事情会导致他们取消中间过程(断电等),那么即使产品被标记为已售出,但自结账以来它实际上并未售出过程没有完成.如果这种情况持续发生,那么产品就会积压.其次,会话还可以检查库存,而另一个会话将其标记为已售出,因此即使第二个会话已经购买,第一个会话也将继续.这导致我们回到原来的问题.

我在数据库端查看表锁定,但我不确定这是不是最好的主意.任何建议都将受到高度赞赏!

谢谢,
dyip

解决方法:

你可以有一个故障保险,以便在用户结账时下订单,但是在订单发货之前,用户的信用卡实际上并未收费.然后,对于库存已用完的情况,您可以通过电子邮件向这些客户发送电子邮件并告诉他们“抱歉,我们已售罄X,您不会被收费等”.

你可以给他们下一个订单的折扣作为补偿,但这个过程将避免任何退款费用,退款等,因为他们从未实际收取没有库存的订单.

当然,听起来这会改变网站处理订单的方式,并且在每个订单准备好之后,必须让某人将信息输入系统.此外,在下订单之前,您需要对卡进行一些验证才能知道它是有效的,以防止欺诈 – 尽管可能是网站已经这样做了?

标签:php,database,e-commerce,race-condition,payment-processing
来源: https://codeday.me/bug/20190710/1422028.html