条带 webhook 未按正确顺序传入的错误
Posted
技术标签:
【中文标题】条带 webhook 未按正确顺序传入的错误【英文标题】:Error with stripe webhooks not incoming in correct order 【发布时间】:2021-11-29 17:41:01 【问题描述】:我一直在将 stripe_event
gem 用于来自 stripe 的 webhook,今天我发现 webhook 似乎没有按正确的顺序传入。我正在存储在条带上进行的费用的本地副本,并且我有以下设置
StripeEvent.configure do |events|
events.subscribe 'payment_intent.created', CreateChargeRecord.new
events.subscribe 'payment_intent.processing', UpdateChargeRecord.new
events.subscribe 'payment_intent.succeeded', UpdateChargeRecord.new
end
查看条纹仪表板,事件payment_intent.created
总是在payment_intent.processing
之前完成。现在我正在按如下方式创建收费记录
class CreateChargeRecord
def call(event)
charge_object = event.data.object
Charge.create(
user: User.find_by(stripe_id: charge_object.customer),
receiver_id: User.find_by(merchant_id: charge_object.transfer_data.destination).id,
amount: charge_object.amount / 100,
currency: 'eur',
application_fee_amount: charge_object.application_fee_amount / 100,
status: charge_object.status,
stripe_id: charge_object.id
)
end
end
更新如下
class UpdateChargeRecord
def call(event)
charge_object = event.data.object
charge = Charge.find_by(stripe_id: charge_object.id)
charge.update!(status: charge_object.status)
end
end
问题在于,从 cli 看来,webhook payment_intent.processing
似乎在 payment_intent.created
之前被接收
2021-10-10 22:08:50 --> payment_intent.processing
2021-10-10 22:08:51 --> payment_intent.created
2021-10-10 22:08:51 <-- [200] POST http://localhost:3000/webhooks/
2021-10-10 22:08:51 <-- [500] POST http://localhost:3000/webhooks/
导致错误NoMethodError (undefined method
update!' for nil:NilClass):` 因为我正在尝试更新一条尚不存在的记录。
我可以在这里做些什么来防止这种情况发生,因为这似乎不是条带的错误?
【问题讨论】:
请求是异步的,但您正在尝试同步处理它们。我只会存储所有按其类型键入的事件,并有一些匹配的后台作业按时间间隔运行,并使用其状态更新任何新付款 【参考方案1】:这是expected and documented -- 事件可能按照它们的生成顺序无序传递。
为了解决这个问题,您的应用程序应该知道这是可能的,例如,当接收到事件时,您可以直接从 API 检索最新的对象状态,而不是使用有效负载。
【讨论】:
以上是关于条带 webhook 未按正确顺序传入的错误的主要内容,如果未能解决你的问题,请参考以下文章