ruby 在另一个服务(如stripe)中使用幂等性密钥的正确实现

mtb9vblg  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(170)

在rails应用程序中处理幂等性的正确方法是什么?我使用的设计和需要确保每个用户不会得到多个重复的PaymentIntents相同的购买。
由于幂等性密钥需要与每个后续失败的请求一起使用,因此它是否应该保存在数据库,会话等中?
Stripe建议使用幂等键来防止相同购买的重复PaymentIntents:https://stripe.com/docs/payments/payment-intents#best-practices

hec6srdp

hec6srdp1#

你不一定需要在你的终端生成/保存幂等键。条带库可以自动生成幂等性密钥,并以指数回退重试请求。
重要的是要注意,幂等性密钥仅在网络条件差的情况下用于防止双重收费。它们允许安全地重试请求,而不会意外地执行相同的操作两次。当API调用在传输过程中中断并且您没有收到响应时,这很有用。例如,如果创建电荷的请求由于网络连接错误而没有响应,则可以用相同的幂等性密钥重试该请求以保证不创建多于一个电荷。
幂等键不能防止由于按钮被按两次而发生的双重充电,例如也许用户在加载页面时点击了两次按钮,这导致了两个API请求。您可能希望使用像disabled HTML attribute这样的方法来防止这种情况发生。

tyky79it

tyky79it2#

idempotency key是帮助您和stripe避免创建重复工作的任何id
例如,当用户开始在应用程序中创建Purchase时,您希望使用purchase.id作为幂等键。
然后,您将为每个PurchaseIntent请求传递该密钥。
如果客户在购买时更新了某些内容,您可以将该数据沿着具有相同purchase.id的条带
购买完成后,您将保留更多的数据,如completed_at:datetimecompleted_transaction_data:json

相关问题