Stripe Webhook应用错误:验证失败时应返回何种状态码?
Webhook处理错误时的状态码选择
在处理checkout.session.completed这类Webhook时,核心原则是只要成功接收到Webhook请求,就返回200状态码,不管后续业务逻辑是否出错。
原因很直接:Webhook发送方会根据返回的状态码判断请求是否送达。如果返回400或500,发送方会判定请求失败,进而反复重试该Webhook,这会导致服务重复处理同一事件,引发数据重复、逻辑冲突等问题。
哪怕验证organisationId时发现组织不存在,也应该先返回200确认接收,再通过内部错误日志、告警通知等方式处理这个业务异常。
对应你的代码,正确写法如下:
if (!organisation) { // 记录错误日志,便于后续排查 console.error(`Checkout session ${session.id} 存在无效的organisationId: ${metadata.organisationId}`); // 返回200表示已成功接收请求 return res.status(200).send({ code: 'ORGANISATION_NOT_FOUND', message: '指定的组织不存在' }); }
返回的响应内容可以包含错误信息用于排查,但状态码必须设为200,避免触发重复重试。
内容的提问来源于stack exchange,提问作者J.Do
相关产品推荐
相关产品推荐

