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