Stripe 文档指出,它偶尔可以多次发送 Webhook 事件:
处理重复事件
Webhook 端点有时可能会多次接收同一事件 一次。您可以通过记录来防止重复的事件接收 您已处理的事件 ID,但不处理已记录的事件 ID 事件。
我的问题:在这些可能的重复事件之间我应该预计多长时间延迟?我们谈论的是几秒还是几小时/天?
如果延迟最多几秒钟,我可以通过在数据库中忽略重复的插入尝试(例如有效的高级订阅)来处理这个问题。但如果延迟较长,用户可能会同时取消订阅,在这种情况下,我不想处理重复的“subscription.created”事件,因为它会错误地重新实例化订阅。
Stripe 通常建议使用事件 ID
evt_12345
建立一个包含所有已处理事件的数据库,因为它是唯一的。如果您收到已处理的事件的交付,则可以立即返回 200 以停止重试。 例如,这种逻辑应该能够适应几天后重新发送的同一事件,尽管他们极不可能这样做。