You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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支持设置客户的默认支付方式,你可以通过两种方式操作:
    1. 查询默认支付方式:调用stripe.customers.retrieve('{{CUSTOMER_ID}}'),返回对象中的invoice_settings.default_payment_method字段即为客户的默认PaymentMethod ID;若该字段为空,说明客户未设置默认。
    2. 设置默认支付方式:既可以通过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,不支持数组传入。如果需要实现多卡片自动重试扣费的逻辑,需自行处理:

  1. 优先使用默认卡片创建PaymentIntent并发起扣费
  2. 若扣费失败(如卡片过期、余额不足等),依次尝试其他有效的PaymentMethod ID
  3. 每一次重试都需要创建新的PaymentIntent,传入对应的单个PaymentMethod ID

内容的提问来源于stack exchange,提问作者Eunice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:10:08