咨询:Stripe Subscriptions能否自动尝试备份卡与非默认卡扣费
Stripe Smart Retries 不尝试备份卡/非默认卡的解决方案
Stripe 默认的 Smart Retries 确实只针对客户的默认支付方式发起重试,不会自动尝试备份卡或非默认卡,这是当前产品的设计逻辑。不过有几种官方支持的方式可以实现自动尝试其他卡片的需求,无需立刻启动自定义开发:
1. 使用支付方法集合(Payment Method Sets)
在 Stripe Dashboard 的「Billing > Settings > Payment Methods」中,创建支付方法集合,将客户的所有存储卡片加入该集合,然后在订阅配置里指定使用这个集合作为扣费来源。这样当默认卡扣费失败时,Stripe 会自动尝试集合内的其他卡片。
操作要点:
- 创建集合时选择「包含客户的所有支付方法」,或手动指定允许的卡片类型
- 创建/更新订阅时,将
default_payment_method参数替换为payment_method_collection,传入你创建的集合 ID - 确保订阅的
payment_behavior设置为default_incomplete或allow_incomplete,让 Stripe 自动处理多卡片重试流程
2. 启用自动支付方法选择(Automatic Payment Method Selection)
在「Billing > Settings > Subscriptions and emails」中开启该功能,Stripe 会基于机器学习模型自动选择客户存储的最优支付方式(包括非默认卡)扣费,默认卡失败时会自动尝试其他可用卡片。
注意:该功能需账号已启用 Billing Scale 套餐,可直接在 Dashboard 中检查权限并开启。
3. Webhook 触发手动重试逻辑
如果上述官方功能无法满足需求,可监听 invoice.payment_failed Webhook 事件,在事件触发时遍历客户的所有支付方法,手动尝试用其他卡片支付未付账单。
示例伪代码:
def handle_invoice_payment_failed(event): invoice = event.data.object customer = stripe.Customer.retrieve(invoice.customer) # 遍历客户所有非失败的卡片支付方式 for payment_method in customer.payment_methods.data: if payment_method.type == 'card' and payment_method.id != invoice.payment_method: try: stripe.Invoice.pay( invoice.id, payment_method=payment_method.id ) break except stripe.error.CardError: # 当前卡片扣费失败,继续尝试下一个 continue
针对无默认卡的处理方案
如果客户未设置默认卡但存储了其他卡片,可通过以下方式优化:
- 在客户添加卡片的前端流程中,引导用户设置默认卡,或自动将第一张添加的卡片设为默认
- 通过 API 自动将客户最新添加的卡片标记为默认支付方式
- 创建订阅时强制指定一个可用的支付方法,而非依赖默认值
内容的提问来源于stack exchange,提问作者rjbathgate
相关产品推荐
相关产品推荐

