带有外部支付网关的电子商务库存管理
Posted
技术标签:
【中文标题】带有外部支付网关的电子商务库存管理【英文标题】: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,将商品长期锁定在库存中。
处理这种情况的最佳方法是什么?
【问题讨论】:
【参考方案1】:所有支付网关都会进行回发,让您知道(例如)支付参考等。大多数还会回发授权/身份验证信息,例如 CSC/CVV2 检查结果,以便您(商家)拥有最终决定权是否接受付款。
收到回发后,您应该能够检查票证是否仍然“锁定”,如果没有,则通过支付网关发出付款撤销以取消付款。然后你需要显示一条消息'对不起,超时请重试'
如果网关不支持“即时反转”风格的功能,那么它们至少会支持某种“无效”功能,即资金永远不会从客户卡中实际取出,并且授权暂停会自动取消(通常两天后,虽然在某些卡上可能需要更长的时间)。对于超时的(希望很小)数量的事务,这可能是可以接受的。值得监控有多少事务超时,以便可以调整超时期限。
或者,如果票证不再被锁定,(同样,如果网关支持它)发回退款付款。
【讨论】:
afaik 回发发生在付款成功后,所以两个用户仍然会突然发现他们的 cc 上的钱变少了。如果我错了,请纠正我,但这相当于手动转到支付网关后端并检查“不接受此付款”(付款撤销通常需要几天时间,所以我想避免应付数千公关)。 不能代表每个网关,但我知道大多数英国网关允许您发回“撤销”消息以取消付款。这是一个即时逆转,通常不需要两天或更长时间才能下降。【参考方案2】:您可能无法使用外部支付网关入口页面来做您想做的事情。
Paypal 和许多其他处理器具有直接的 Web 服务集成路径。这意味着您在您的页面上收集付款信息,将其提交到您的服务器,然后您进行 Web 服务调用并从处理器获得立即响应。 (我不记得 PayPal 对执行此操作的产品是什么称呼,但它曾经被命名为 PayFlow Pro,是从 Verisign 购买的。)
因此,当您将门票放入购物车时,您不会将其锁定。您的工作流程是:
-
收集付款信息。
一旦付款信息回传到您的服务器:
一种。尝试锁定门票 - 如果不可用,则返回失败
湾。成功锁定后,处理授权
成功授权后,票证将从可用池中移除。
如果授权失败或出错,票证将被解锁并可供其他用户使用。
无需处理锁定超时。它们仅被锁定足够长的时间以验证有效付款。
您没有询问如何在防止 PCI 暴露的同时解决问题。因为你可能会问:
有一些处理器允许您将付款信息收集嵌入到您自己的页面中。有些允许您获取“令牌”来替换卡号,以便您的服务器永远不会收到卡号。然后可以在服务器端 Web 服务调用中使用该令牌。你得到你需要的,你不必处理接收卡号周围的 PCI 问题。
【讨论】:
【参考方案3】:如果采用更社会化的解决方案而不是技术解决方案呢?为什么不明确表明,当您等待太久时,票证会被解锁?
【讨论】:
这不会解决问题,因为即使很明显,两个付款人最终都会为一件物品进行两次合法付款。 是的,你是对的,它不会阻止两个客户中的一个以所述方式购买机票。您也可以说第一位顾客等了很久。也许您可以在您的 Paypal 请求中包含您的 5 分钟规则...? 在这种情况下,问题变成:(所有)支付网关是否支持(可配置)超时?即使,这也只能解决前半部分 =) 好的,我检查了 Paypal 文档,找不到任何符合我建议的内容。另一种看待这种情况的方式可能是:这种情况多久发生一次? 经常出现在售票的高流量网站上(因为人们往往会急着买票)【参考方案4】:我认为如果有人像在这 5 分钟内那样把它放在他的购物车里,你不应该阻止它。你最终可能会赶走其他几个客户......
我建议您允许所有人将门票添加到他/她的购物车中,除非有人实际付款并购买了它。现在,当其他人继续结帐时,只需闪烁一条消息“对不起,你迟到了......票已售罄!!!”并且票应该从他们的购物车中移除。
这样就不会阻止您的客户购买该票,并且仍然不会出现两个人为同一张票付款的情况。
【讨论】:
只有完成支付才知道支付是否成功。如果两个用户都已经在付款(即贝宝)页面上,您无法控制:他们都会(在贝宝上)支付最新票。以上是关于带有外部支付网关的电子商务库存管理的主要内容,如果未能解决你的问题,请参考以下文章
添加一个复选框作为禁用支付网关的 WooCommerce 管理产品选项