我怎样才能防止使用条纹重复收费?

我正在使用Stripe来允许我的客户保存信用卡并支付发票(具有唯一的ID)。 付款时,我使用表单发送带有卡片ID(由条形提供)的POST请求到我的服务器,并且控制器给它充电。 然后,我将发票标记为支付给我。

事实certificate,如果我双击表单的提交button足够快,我发送两个POST请求,卡最终被收取两次,因为当第二个POST请求到达我的服务器时,从我的服务器的POST请求到Stripe API第一次点击)没有完成,因此发票还没有标记为付款。

我正在考虑禁用第一次点击后的表单提交button,但我觉得可能有一个更干净的方式。

有条纹的一面,以防止重复收费(也许使用我的发票ID)? 如果不是最好的后端方法在我身边做到这一点?

第一次点击后禁用表单提交绝对是实现这个最简单的方法。

另一种方法是使用这里logging的幂等请求。 这个想法是,当向Stripe的API发出一个请求时,你传递一个唯一的标识符,确保你只能运行一次这个事务。 如果您使用完全相同的幂关系重新运行查询,您将从第一个电话获得原始响应,确保您从未在您的网站上为同一“交易”创build2次费用。

是幂等的请求是实现这一点的正确方法。

你可以参考这里

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

你可以实现的另一个简单的解决scheme就是使用状态机跟踪条带API调用。