我正在为活动(如音乐会)开发一个在线票务系统。一个基本部分是座位表,其中将向游客展示可供选择的可用座位/门票。一旦他们做出选择,系统会立即尝试保留 10 分钟的门票(通过将门票 ID 输入到门票 ID 为关键的表格中)。仅当预订成功时,才会显示一个贝宝按钮以进行付款。
这一切都很好。订票对我来说不是问题。我可以在我的系统中处理它。但是一旦贝宝进入游戏,事情就变得困难了。
问题:如果用户由于某种原因在 Paypal 上花费了很多时间(超过 10 分钟),我网站上的门票预订将过期,允许其他访客购买门票,这可能发生在访客 1 完成之前支付。访客 1 没有看到任何这些,因为他仍在贝宝中...在某个时间点,他将设法付款(例如 15 分钟后),这将完全有效,因为贝宝不知道任何有关过期预订的信息.
最后,我可能有两个游客支付了同一张票/座位!
我怎样才能防止这种情况发生?如果涉及两个系统并且其中一个不受您的控制,您如何处理竞争条件?
我的想法是:实际上应该在付款之前进行检查,但是我当然无法控制贝宝中发生的事情!
我知道我可以使用 Paypal 的 IPN 等,但这只会在付款后发生,为时已晚。
或者,如果贝宝通过 API 要求我确认付款,那就太好了。然后我可以说“不”,以防门票已经卖给了其他人。但我认为贝宝不可能做到这一点。