使用外部支付网关进行电子商务库存管理

时间:2009-11-24 21:58:27

标签: php transactions e-commerce payment-gateway payment

此问题类似于this one,但有一个扭曲(所以旧问题的答案在以下情况下无效)

我有一个卖票的网站(PHP / MYSQL)。假设我只剩下一张票:

  • 买家A将票证放入购物车并进入支付网关页面(即paypal)
  • 门票被锁定5分钟,因此买家B无法购买
  • 买家A等待5分钟,Paypal页面打开,什么都不做
  • 机票已解锁,因此买方B将其放入购物车并进入Pay​​Pal页面
  • 买方A成功执行PayPal上的付款程序
  • 买方B成功执行PayPal付款程序

我可以等待更长时间,但我认为这不会在更一般的情况下解决问题。而且,如果我这样做,就可以制作某种DoS,将物品锁定在库存中很长一段时间。

处理这种情况的最佳方法是什么?

4 个答案:

答案 0 :(得分:6)

所有支付网关都会进行回发以通知您(例如)付款参考等。大多数还会回发授权/认证信息,例如CSC / CVV2检查结果,以便您(商家)拥有最终发言权是否接受付款。

收到回发后,您应该能够检查机票是否仍然“锁定”,如果没有,则通过支付网关发出付款撤销以取消付款。然后,您需要显示消息“抱歉,超时超时请再试一次”

如果网关不支持“即时反转”样式功能,那么它们至少会支持某种“无效”功能,从而实际上不会从客户卡中取出资金,并且授权保持自动下降(通常两天之后,虽然某些卡可能需要更长的时间)。对于(希望很小)超时的交易数量,这可能是可以接受的。值得监控多少交易超时,以便可以调整超时期限。

或者,如果票证不再被锁定(并且再次,如果网关支持它),则发回退款付款。

答案 1 :(得分:2)

您可能无法使用外部支付网关输入页面并执行您要执行的操作。

Paypal和许多其他处理器都有直接的Web服务集成路线。这意味着您收集页面上的付款信息,将其提交给您的服务器,然后进行Web服务调用并立即从处理器获得响应。 (我不记得PayPal称之为产品的是什么,但过去它被命名为PayFlow Pro并且是从Verisign购买的。)

因此,当您将门票放入购物车时,您不会锁定门票。您的工作流程将是:

  1. 收集付款信息。
  2. 将付款信息发回服务器后: 一个。尝试锁定票证 - 如果不可用则返回失败 湾成功锁定,处理授权
  3. 成功授权后,将从可用池中删除票证。
  4. 如果授权或错误失败,则会解锁门票并可供其他用户使用。
  5. 无需处理锁定超时。它们仅被锁定足够长的时间以验证有效付款。

    在防止PCI暴露的同时,您没有询问解决问题的方法。既然你可能会问:

    有些处理器允许您将付款信息集合嵌入到您自己的页面中。有一些允许您获取“令牌”来替换卡号,以便您的服务器永远不会收到卡号。然后可以在服务器端Web服务调用上使用该令牌。您可以得到所需的信息,而且您无需处理有关接收卡号的PCI问题。

答案 2 :(得分:1)

如何使用更具社交性的解决方案而非技术解决方案呢?为什么不在你等待太久的时候明确表示票证会被解锁?

答案 3 :(得分:1)

我认为如果有人在5分钟内把它放在购物车中,你就不应该阻止这张票。你最终可能会驱逐其他一些客户......

我建议你允许每个人将门票添加到他/她的购物车,除非有人实际支付并购买。现在,当其他人继续结帐时,只需点亮一条消息“抱歉你迟到了...售罄售罄!!!”应将车票从购物车中移除。

这样就不会阻止您的客户购票,但仍然不会出现两个人为同一张票付款的情况。