使用PayPal在线订票:防止多个访问者购买同一张票



我正在开发一个活动(如音乐会)的在线票务系统。基本部分是座位表,游客将在其中获得可供选择的座位/门票。一旦他们做出选择,系统会立即尝试预订10分钟的门票(将门票ID输入一个表中,其中门票ID是关键)。只有在预订成功的情况下,才会显示一个贝宝按钮进行付款。

所有这些都很好。订票对我来说不是问题。我可以在我的系统中处理。但一旦贝宝加入游戏,事情就会变得困难起来。

问题:如果用户出于某种原因在Paypal上花费了大量时间(超过10分钟),我网站上的门票预订将到期,允许另一位访客购买门票,这可能发生在访客1付款之前。访问者1没有看到任何这些,因为他仍然在贝宝。。。在某个时间点,他会设法付款(例如15分钟后),这将非常有效,因为贝宝对过期预订一无所知。

最后,我可能会有两个访客为同一张票/座位买单!

我该如何防止这种情况发生?如果涉及两个系统,而其中一个系统超出了你的控制范围,你如何处理比赛条件?

我的想法是:实际上,应该在付款前进行检查,但我当然无法控制贝宝中发生的事情!

我知道我可以使用贝宝的IPN等,但这只发生在付款后,为时已晚。

或者,如果贝宝通过API要求我确认付款,那就太好了。然后我可以说"不",以防门票卖给了其他人。但我认为贝宝不可能做到这一点。

我建议使用Express Checkout。Express Checkout允许您控制何时付款,因为您将向PayPal发出API调用以实际处理付款。

你可以考虑的另一种可能性是使用授权而不是销售交易。这样,如果另一位买家就座,你可以取消授权,买家不会被收取费用。(PayPal可能会向您收取无效授权的费用。)

Matt Cole建议的一个解决方案是使用"授权"而不是"销售"。

当您创建Paypal支付时,您可以通过在对Paypal API的调用中将"intent"设置为"authorize"而不是"sale"({intent:"authorization"})来实现这一点。一旦客户批准了交易,您就可以通过获取付款来授权这笔交易。

相关内容

最新更新