按正常流程,新建订阅收到的webhook顺序是
1. customer.subscription.created(status: incomplete)
2.customer.subscription.updated(status: active)
但实际上这笔我是先收到了updated再收到了created,导致原本按顺序先新增再更新的逻辑就不对了,我created的webhook就一直返回失败。
搜了一下,发现Stripe 的 webhook 事件并不保证顺序!原因包括:
- 并发发送: Stripe 可能同时发送多个事件
- 网络延迟: 不同事件的网络传输时间可能不同
- 重试机制: 如果某个事件失败,会重试,可能导致顺序混乱
- 服务器处理时间: 你的服务器处理不同事件的时间可能不同
所以在写webhook的时候,一定得充分考虑到各种corner case