Stripe Checkout如何避免创建status:incomplete状态订阅
背景
通过Stripe API创建订阅时,若需要在订阅首张发票支付失败时让Stripe返回HTTP 402状态码,可配置payment_behavior: error_if_incomplete参数,该场景下支付失败时Stripe完全不会创建订阅。
问题
使用Stripe Checkout时是否有方案实现相同效果?
实际使用中发现,即便支付失败,Stripe仍会创建status: incomplete状态的订阅,若23小时内未完成支付该订阅才会过期。查阅Checkout Session创建参数后,未找到可设置payment_behavior的相关选项。
解答
Stripe Checkout 原生没有提供和payment_behavior: error_if_incomplete对等的配置项,无法做到首笔支付失败时完全不生成订阅记录。
Checkout 订阅模式的固定逻辑是:创建mode: subscription的Checkout Session时,Stripe会同步生成一个status: incomplete的订阅,只有用户完成首张发票支付,订阅才会转为active状态;如果支付失败、用户中途退出支付页,这个incomplete状态的订阅会默认留存23小时后自动过期,没有内置参数可以跳过这个预创建步骤。
如果要实现和API创建订阅时一致的效果,可以选择以下两种落地方案:
- 即时清理无效订阅:配置Stripe Webhook监听
checkout.session.expired、invoice.payment_failed事件,事件触发时判断关联订阅是否处于incomplete状态、是否未产生过成功支付记录,符合条件就主动调用订阅删除接口清理,不用等23小时的自动过期周期,最终效果和error_if_incomplete完全一致。 - 拆分流程绕过预创建逻辑:不直接使用Checkout的订阅模式,先创建
mode: setup的Checkout Session收集用户有效支付方式,拿到支付方式ID后,再由服务端主动调用订阅创建接口,此时就可以正常传入payment_behavior: error_if_incomplete参数,首笔支付失败时Stripe直接返回402状态码,不会生成任何订阅记录。
内容的提问来源于stack exchange,提问作者adamgy
相关产品推荐
相关产品推荐

