这个问题类似于
this one但有一个扭曲(所以旧问题的答案在以下场景中无效)
我有一个卖票的网站(PHP / MysqL).假设我只剩下一张票:
>买家A将车票放入购物车并进入支付网关页面(即paypal)
>门票被锁定5分钟,所以买家B不能买
>买家A等待5分钟,Paypal页面打开,什么都不做
>机票已解锁,因此买方B将其放入购物车并进入paypal页面
>买方A成功执行PayPal上的付款程序
>买方B成功执行PayPal的付款程序
我可以等待更长时间,但我认为这不会在更一般的情况下解决问题.而且,如果我这样做,可以制作某种DoS,将物品锁定在库存中很长一段时间.
什么是处理这种情况的最佳方法?
所有支付网关都会进行回发以告知您(例如)支付参考等.大多数还会回发授权/认证信息,例如CSC/C++VV2检查结果,以便您(商家)对是否接受最终决定权付款与否.
原文链接:https://www.f2er.com/php/137525.html收到回发后,您应该能够检查机票是否仍然“锁定”,如果没有,则通过支付网关发出付款撤销以取消付款.然后你需要显示一条消息’抱歉,超时超时请再试一次’
如果网关不支持“即时反转”样式功能,那么它们至少会支持某种“无效”功能,从而实际上不会从客户卡中取出资金,并且授权保持自动下降(通常在两天后),虽然在某些卡上可能需要更长的时间).对于(希望很小)超时的交易数量,这可能是可以接受的.值得监控多少交易超时,以便可以调整超时期限.
或者,如果票证不再被锁定(并且再次,如果网关支持它),则发回退款付款.