php - 带有外部支付网关的电子商务库存管理

标签 php transactions e-commerce payment-gateway payment

这个问题类似于this one但有一个转折(所以旧问题接受的答案在以下情况下无效)

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

  • 买家 A 将票放入她的购物车并转到支付网关页面(即 paypal)
  • 门票被锁定5分钟,买家B无法购买
  • 买家 A 在 paypal 页面打开的情况下等待 5 分钟,什么都不做
  • 门票已解锁,买家 B 将其放入购物车并进入 paypal 页面
  • 买家A在paypal上成功完成支付程序
  • 买家B在paypal上执行付款程序成功

我可以等更长时间,但我认为这不会解决更一般情况下的问题。此外,如果我这样做,将有可能产生某种 DoS,将库存元素锁定很长一段时间。

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

最佳答案

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

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

如果网关不支持“即时撤销”式功能,那么它们至少会支持某种“作废”功能,资金永远不会真正从客户卡中提取,并且授权保留会自动取消(通常两天后,尽管某些卡可能需要更长时间)。对于超时的(希望是少量的)事务,这可能是可以接受的。值得监控有多少事务超时,以便可以调整超时期限。

或者,如果票不再被锁定,(同样,如果网关支持的话)发回退款。

关于php - 带有外部支付网关的电子商务库存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1793218/

相关文章:

php - MySQL数据库查询-速度

php - ldap_bind() - 无法联系 LDAP 服务器

c# - 多个 TransactionScope 问题

ruby-on-rails-3 - Spree、Rails 3 和主题

php - Twig 过滤器/扩展中的 Symfony2 : How to get container parameters from parameters. yml?

hibernate - 大对象不能用于自动提交模式

c# - 交易范围和交易

javascript - 产品 ID 代码不正确地传输到 Shopify 结帐页面

e-commerce - 建立电子商务网站最简单、最便宜的解决方案是什么

php - 获取数组中子串出现的次数