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

Posted

技术标签:

【中文标题】使用 PayPal 在线订票:防止多个访客购买同一张票【英文标题】:Online Ticket Booking using PayPal: Prevent multiple visitors from buying same ticket 【发布时间】:2013-01-26 18:36:05 【问题描述】:

我正在为活动(如音乐会)开发一个在线票务系统。一个基本部分是座位表,其中将向游客展示可供选择的可用座位/门票。一旦他们做出选择,系统会立即尝试保留 10 分钟的门票(通过将门票 ID 输入到门票 ID 为关键的表格中)。 仅当预订成功时,才会显示 paypal 按钮以进行付款。

这一切都很好。订票对我来说不是问题。我可以在我的系统中处理它。但是一旦 paypal 进入游戏,事情就变得困难了。

问题: 如果用户由于某种原因在 Paypal 上花费大量时间(超过 10 分钟),我网站上的门票预订将过期,允许其他访客购买门票,这可能发生在访客 1 付款之前。访客 1 没有看到任何这些,因为他仍在贝宝中...在某个时间点,他将设法付款(例如 15 分钟后),这将完全有效,因为贝宝不知道任何有关过期预订的信息.

最后,我可能有两个访客支付了同一张票/座位!

我怎样才能防止这种情况发生? 如果涉及两个系统并且其中一个不受您的控制,您如何处理竞争条件?

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

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

或者,如果贝宝通过 API 要求我确认付款,那就太好了。然后我可以说“不”,以防门票已经卖给了其他人。但我认为使用贝宝是不可能的。

【问题讨论】:

【参考方案1】:

我建议使用 Express Checkout。 Express Checkout 允许您控制付款发生的时间,因为您将触发对 PayPal 的 API 调用以实际处理付款。

您可以研究的另一种可能性是使用授权而不是销售交易。这样,如果其他买家上座,您可以取消授权,并且不会向买家收费。 (不过,PayPal 可能会因授权无效而向您收费。)

【讨论】:

谢谢。 Express Checkout 听起来不错,我会研究一下。关于第二部分:这是贝宝的特定功能吗?我已经搜索并没有真正找到有关“授权”的任何内容。 不,授权在信用卡行业是相当标准的。此页面很好地介绍了 Express Checkout 提供的不同付款类型:x.com/developers/paypal/documentation-tools/express-checkout/…【参考方案2】:

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

您可以在创建 Paypal 付款时在调用 Paypal API 时将“intent”设置为“authorize”而不是“sale”(intent: "authorize")。客户批准交易后,您可以通过捕获付款来授权此交易。

【讨论】:

以上是关于使用 PayPal 在线订票:防止多个访客购买同一张票的主要内容,如果未能解决你的问题,请参考以下文章

MVC Paypal 自适应支付

Paypal 多个 IPN 同一商家设置快速结帐

处理两个人同时在网上商店购买一件独特商品

Paypal 订阅的访客结帐

使用 Javascript 智能按钮灯箱的 PayPal 访客订阅未关闭

PayPal - 一次购买可能有多个账单协议?