php - 我应该使用排队系统来处理付款吗?

标签 php queue stripe-payments payment-gateway payment

我正在使用 Slim连同Stripe's PHP Library在我的申请中处理付款。

一切都很好,但是直到最近,我在我的系统中发现了一个令人震惊的错误,我认为这个问题可能比我想象的要严重得多。按照我的逻辑,我会在支付流程的三个独立检查点检查我的 (MySQL) 数据库中的库存,以确保用户购买的产品数量不会超过可用数量。

但是,当多个用户在大约 500 毫秒 内发出请求时,支付系统似乎会同时处理所有这些请求,从而导致一系列问题,包括库存不正确和不平衡、虚假的用户确认成功付款。

通过一些尽职调查,我将解决方案缩小为两个选项(尽管我可能卖空了自己):

1) 使用 Queueing System据我所知,它将对这些请求进行排队并一次处理一个,从而形成先到先得的原则。

2) 将一些中间件附加到每个将充当队列的请求,并尝试同步处理每个请求(尽管这可能与我已有的类似)

话虽如此,对这些选项有什么建议/意见吗?并且显然可以完全放弃我的想法并指出我不同的方向。

最佳答案

所以如果我理解主要问题是你害怕有人购买已经售出的产品(此时正在处理付款)......

我认为你应该放弃这个排队系统的想法——因为这不是这里的线索。线索是您的商店逻辑。

我不知道你的商店是如何运作的,但从逻辑的角度来看,产品应该在客户点击发送订单的那一刻被锁定(分配),而不是在付款过程之后。因为并非每次付款都可能成功(如果客户想使用 Stripe 或其他付款方式重试不成功的付款怎么办?)。

关于php - 我应该使用排队系统来处理付款吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48067837/

相关文章:

PHP 回显 block 行为

php - 这是好的成员(member)支付数据库模式吗?

api - 使用 Stripe Connect 促进用户之间的交易?

php - mysql_fetch_row 每隔一行返回一次?

javascript - 数据未显示在选择标签中

Laravel 队列优先级和保留

java - 客户端确认收到生产者消息

java - 防止 ConcurrentLinkedQueue<T> 出现内存不足异常

stripe-payments - Stripe 重定向 URI - url 中的动态数字

javascript - Stripe Angular Controller 不更新 View