如何使用Stripe防止重复充电?

Iwa*_*aru 4 node.js stripe-payments

我正在使用Stripe允许我的客户保存信用卡并支付发票(具有唯一ID).在付款时,我使用表单将带有卡ID(由条带提供)的POST请求发送到我的服务器,然后控制器对其进行收费.然后我将发票标记为付款在我身边.

事实证明,如果我足够快地双击我的表单的提交按钮,我发送两个POST请求,并且卡最终被收取两次,因为当第二个POST请求到达我的服务器时,从我的服务器到Stripe API的POST请求(来自第一次点击)没有完成,因此发票尚未标记为付款.

我正在考虑在第一次点击后禁用表单提交按钮,但我觉得可能有一种更清洁的方式.

Stripe方面是否有防止重复收费(可能使用我的发票ID)?如果不是最好的后端方法在我身边做什么呢?

koo*_*jah 11

在第一次单击后禁用表单提交绝对是实现此操作的最简单方法.

另一种方法是使用此处记录的幂等请求.我们的想法是,在向Stripe的API发出请求时传递唯一标识符,以确保您只能运行此事务一次.如果您使用完全相同的幂等关键字重新运行查询,您将从第一次调用中获得原始响应,这可确保您不会为您网站上的同一"交易"创建2个费用.


小智 6

是的,幂等请求是实现此目的的正确方法。

你可以在这里参考这个

https://stripe.com/docs/api#idempot_requests

您可以实现的另一个简单解决方案是通过跟踪 stripe api 调用来使用状态机。