该问题与this one类似,但有一个转折(因此,在以下情况下,较旧的问题接受的答案无效)

我有一个售票网站(PHP/MYSQL)。假设我只剩下一张票:

  • 买家A将票放入她的购物车,然后转到付款网关页面(即paypal)
  • 该票证已锁定5分钟,因此买方B无法购买该票证。
  • 买方A在打开付款页面时等待5分钟,无所事事
  • 票已解锁,因此买家B将其放入购物车并进入Pay​​pal页面
  • 买方A成功完成
  • 在paypal上执行付款程序
  • 买方B成功完成
  • 在paypal上执行付款程序

    我可以等待更长的时间,但在更一般的情况下,我认为这不会解决问题。此外,如果我这样做,可以进行某种DoS,将物品长时间锁定在库存中。

    处理这种情况的最佳方法是什么?

    最佳答案

    所有付款网关都会回发信息,以告知您(例如)付款引用等。大多数还会回发授权/身份验证信息,例如CSC/CVV2检查结果,以便您(商家)拥有是否接受最终决定权是否付款。

    收到回发后,您应该能够检查票证是否仍被“锁定”,如果没有,则通过付款网关发出付款冲销以取消付款。然后,您需要显示一条消息“对不起,超出了超时时间,请重试”

    如果网关不支持“即时逆转”样式的功能,则它们将至少支持某种“无效”功能,从而从根本上不会从客户卡中实际提取资金,并且授权保留会自动取消(通常是两天后) ,尽管某些卡片可能需要更长的时间)。对于超时的事务数量(希望很小),这可能是可以接受的。有必要监视多少个事务超时,以便可以调整超时时间。

    或者,如果票证不再被锁定,(如果网关支持,票证将再次被锁定)发回退款。

    关于php - 带有外部支付网关的电子商务库存管理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1793218/

    10-13 02:31