【问题标题】:ecommerce stock management with external payment gateway带有外部支付网关的电子商务库存管理
【发布时间】:2010-12-20 01:50:20
【问题描述】:

这个问题与this one 类似,但有一点不同(因此旧问题接受的答案在以下情况下无效)

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

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

我可以等待更长时间,但我认为这不会解决更一般情况下的问题。此外,如果我这样做,将有可能进行某种 DoS,将商品长期锁定在库存中。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • afaik 回发发生在付款成功后,所以两个用户仍然会突然发现他们的 cc 上的钱变少了。如果我错了,请纠正我,但这相当于手动转到支付网关后端并检查“不接受此付款”(付款撤销通常需要几天时间,所以我想避免应付数千公关)。
    • 不能代表每个网关,但我知道大多数英国网关允许您发回“撤销”消息以取消付款。这是一个即时逆转,通常不需要两天或更长时间才能下降。
    【解决方案2】:

    您可能无法使用外部支付网关入口页面来做您想做的事情。

    Paypal 和许多其他处理器具有直接的 Web 服务集成路径。这意味着您在您的页面上收集付款信息,将其提交到您的服务器,然后您进行 Web 服务调用并从处理器获得立即响应。 (我不记得 PayPal 对执行此操作的产品是什么称呼,但它曾经被命名为 PayFlow Pro,是从 Verisign 购买的。)

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

    1. 收集付款信息。
    2. 一旦付款信息回传到您的服务器: 一种。尝试锁定门票 - 如果不可用,则返回失败 湾。成功锁定后,处理授权
    3. 成功授权后,票证将从可用池中移除。
    4. 如果授权失败或出错,票证将被解锁并可供其他用户使用。

    无需处理锁定超时。它们仅被锁定足够长的时间以验证有效付款。

    您没有询问如何在防止 PCI 暴露的同时解决问题。因为你可能会问:

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

    【讨论】:

      【解决方案3】:

      如果采用更社会化的解决方案而不是技术解决方案呢?为什么不明确表明,当您等待太久时,票证会被解锁?

      【讨论】:

      • 这不会解决问题,因为即使很明显,两个付款人最终都会为一件物品进行两次合法付款。
      • 是的,你是对的,它不会阻止两个客户中的一个以所述方式购买机票。您也可以说第一位顾客等了很久。也许您可以在您的 Paypal 请求中包含您的 5 分钟规则...?
      • 在这种情况下,问题变成:(所有)支付网关是否支持(可配置)超时?即使,这也只能解决前半部分 =)
      • 好的,我检查了 Paypal 文档,找不到任何符合我建议的内容。另一种看待这种情况的方式可能是:这种情况多久发生一次?
      • 经常出现在售票的高流量网站上(因为人们往往会急着买票)
      【解决方案4】:

      我认为如果有人像在这 5 分钟内那样把它放在他的购物车里,你不应该阻止它。你最终可能会赶走其他几个客户......

      我建议您允许所有人将门票添加到他/她的购物车中,除非有人实际付款并购买了它。现在,当其他人继续结帐时,只需闪烁一条消息“对不起,你迟到了......票已售罄!!!”并且票应该从他们的购物车中移除。

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

      【讨论】:

      • 只有完成支付才知道支付是否成功。如果两个用户都已经在付款(即贝宝)页面上,您无法控制:他们都会(在贝宝上)支付最新票。
      猜你喜欢
      • 2013-05-25
      • 2011-12-31
      • 2015-05-10
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 2018-03-05
      • 2019-07-13
      • 1970-01-01
      相关资源
      最近更新 更多