此问题类似于this one,但有一个扭曲(所以旧问题的答案在以下情况下无效)
我有一个卖票的网站(PHP / MYSQL)。假设我只剩下一张票:
我可以等待更长时间,但我认为这不会在更一般的情况下解决问题。而且,如果我这样做,就可以制作某种DoS,将物品锁定在库存中很长一段时间。
处理这种情况的最佳方法是什么?
答案 0 :(得分:6)
所有支付网关都会进行回发以通知您(例如)付款参考等。大多数还会回发授权/认证信息,例如CSC / CVV2检查结果,以便您(商家)拥有最终发言权是否接受付款。
收到回发后,您应该能够检查机票是否仍然“锁定”,如果没有,则通过支付网关发出付款撤销以取消付款。然后,您需要显示消息“抱歉,超时超时请再试一次”
如果网关不支持“即时反转”样式功能,那么它们至少会支持某种“无效”功能,从而实际上不会从客户卡中取出资金,并且授权保持自动下降(通常两天之后,虽然某些卡可能需要更长的时间)。对于(希望很小)超时的交易数量,这可能是可以接受的。值得监控多少交易超时,以便可以调整超时期限。
或者,如果票证不再被锁定(并且再次,如果网关支持它),则发回退款付款。
答案 1 :(得分:2)
您可能无法使用外部支付网关输入页面并执行您要执行的操作。
Paypal和许多其他处理器都有直接的Web服务集成路线。这意味着您收集页面上的付款信息,将其提交给您的服务器,然后进行Web服务调用并立即从处理器获得响应。 (我不记得PayPal称之为产品的是什么,但过去它被命名为PayFlow Pro并且是从Verisign购买的。)
因此,当您将门票放入购物车时,您不会锁定门票。您的工作流程将是:
无需处理锁定超时。它们仅被锁定足够长的时间以验证有效付款。
在防止PCI暴露的同时,您没有询问解决问题的方法。既然你可能会问:
有些处理器允许您将付款信息集合嵌入到您自己的页面中。有一些允许您获取“令牌”来替换卡号,以便您的服务器永远不会收到卡号。然后可以在服务器端Web服务调用上使用该令牌。您可以得到所需的信息,而且您无需处理有关接收卡号的PCI问题。
答案 2 :(得分:1)
如何使用更具社交性的解决方案而非技术解决方案呢?为什么不在你等待太久的时候明确表示票证会被解锁?
答案 3 :(得分:1)
我认为如果有人在5分钟内把它放在购物车中,你就不应该阻止这张票。你最终可能会驱逐其他一些客户......
我建议你允许每个人将门票添加到他/她的购物车,除非有人实际支付并购买。现在,当其他人继续结帐时,只需点亮一条消息“抱歉你迟到了...售罄售罄!!!”应将车票从购物车中移除。
这样就不会阻止您的客户购票,但仍然不会出现两个人为同一张票付款的情况。