测试模式下Stripe Checkout Webhook重试相关技术问询
测试场景
我在Stripe Checkout的Test模式下,故意返回400 HTTP响应或超时不返回200响应给Stripe,等待9小时后未收到Webhook重试;打开「query for missed events」页面后,Stripe立即发送了setup_intent.created类型的重试请求。
官方文档参考
《Retry logic》:Test模式下,Stripe会在数小时内重试三次;超过该时间可在控制台手动重试,也可通过「query for missed events」页面核对数据。
《Built-in retries》:Stripe Webhook针对3xx、4xx、5xx状态码内置重试机制;若未及时收到2xx响应,事件会被标记为失败并停止重试,多日后会发送配置错误邮件,未处理则自动禁用端点。
问题与解答
在Test模式下,若要接收Stripe的三次重试请求,是否需要等待超过9小时?
不需要。根据文档,Test模式下的三次重试会在数小时内完成,不会超过9小时。未收到重试可能是重试周期已结束,或者端点被提前标记为失败。在Test模式下,若要立即获取Stripe的重试请求,是否必须打开「query for missed events」页面?
不是必须的。除了打开该页面触发,还可以直接在Stripe控制台的Webhook事件列表里,找到失败的事件手动触发重试。Stripe发送的重试请求的event type是否始终为setup_intent.created?
不是。重试的event type完全取决于最初触发Webhook的事件类型,比如支付成功触发的payment_intent.succeeded,重试的也是这个类型。本次收到setup_intent.created只是因为测试场景对应的是该事件。当Stripe未收到200 HTTP响应或未及时收到200 HTTP响应时,是否会发送三次重试请求?
不一定。正常情况下,针对3xx/4xx/5xx状态码会执行三次内置重试,但如果重试过程中端点持续失败,Stripe可能会提前停止重试,具体以实际重试规则执行。无论Stripe是否及时收到200 HTTP响应,打开「query for missed events」页面都会触发重试请求吗?
不会。只有当存在未成功送达的事件时,打开该页面才会触发重试;若所有事件都已成功收到200响应,打开页面不会触发任何重试操作。
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

