Stripe PaymentIntent API:多支付方式ID选择及默认卡问题
问题
我正在开发一款使用Stripe处理支付的应用,通过Stripe Connect向使用平台处理预订的用户收取应用服务费。目前已实现「支付时保存支付详情」的流程,Stripe已成功保存用户的支付详情,现在想复用这些详情进行后续离线收费。
根据Stripe文档的离线收费流程,需使用Customer和PaymentMethod ID创建PaymentIntent。我通过以下代码获取客户的所有支付方式ID列表:
const paymentMethods = await stripe.paymentMethods.list({ customer: '{{CUSTOMER_ID}}', type: 'card', });
返回结果的data字段是包含客户关联卡片及对应PaymentMethod ID的数组,测试模式下客户关联了5张以上卡片。现有以下疑问:
- 当客户有多张卡片时,如何确定使用哪张?是否可以任意选择?
- Stripe是否支持设置用户默认卡片?
- 尝试传入PaymentMethod ID数组时被Stripe PaymentIntent API拒绝,TypeScript提示
payment_method需传入字符串而非数组,这是为什么?
回答
多卡片选择与默认卡片处理
- Stripe支持设置客户的默认支付方式,你可以通过两种方式操作:
- 查询默认支付方式:调用
stripe.customers.retrieve('{{CUSTOMER_ID}}'),返回对象中的invoice_settings.default_payment_method字段即为客户的默认PaymentMethod ID;若该字段为空,说明客户未设置默认。 - 设置默认支付方式:既可以通过Stripe后台手动为客户配置,也可以调用接口设置:
await stripe.customers.update('{{CUSTOMER_ID}}', { invoice_settings: { default_payment_method: '{{TARGET_PAYMENT_METHOD_ID}}' } });
- 查询默认支付方式:调用
- 若未设置默认支付方式,你可以任意选择状态为
active的PaymentMethod ID创建PaymentIntent(可从paymentMethods.list返回的每个对象的status字段判断有效性)。但从用户体验角度,优先使用用户设置的默认卡片会更合理。
PaymentIntent无法传入ID数组的原因
Stripe的PaymentIntent API设计为单次扣费仅支持指定一个PaymentMethod ID,不支持数组传入。如果需要实现多卡片自动重试扣费的逻辑,需自行处理:
- 优先使用默认卡片创建PaymentIntent并发起扣费
- 若扣费失败(如卡片过期、余额不足等),依次尝试其他有效的PaymentMethod ID
- 每一次重试都需要创建新的PaymentIntent,传入对应的单个PaymentMethod ID
内容的提问来源于stack exchange,提问作者Eunice
相关产品推荐
相关产品推荐

