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

使用Stripe M2读卡器处理订阅首笔支付遇支付方式保存失败求助

解决Stripe M2读卡器首笔支付后关联订阅自动扣费的问题

核心问题说明

card_present类型的PaymentMethod仅适用于线下即时交易,无法保存到客户用于循环扣费。要实现订阅自动扣费,必须通过读卡器收集卡片信息时,让Stripe自动生成可长期复用的card类型PaymentMethod,这需要在初始化流程中指定关键参数。

正确流程

  1. 连接Discover/Connect读卡器
  2. 创建SetupIntent(或带setup_future_usage的PaymentIntent),提前关联目标客户并声明后续用于离线扣费
  3. 使用读卡器完成SetupIntent确认(或PaymentIntent支付确认),Stripe自动将刷卡信息转换为可保存的card类型PaymentMethod并绑定到客户
  4. 直接基于该客户创建订阅,后续循环扣费由Stripe Billing自动执行

具体实现步骤

1. 后端创建SetupIntent(推荐用于单独收集卡片信息)

如果仅需要先收集卡片信息、后续再创建订阅,用SetupIntent:

# 后端Ruby示例
setup_intent = Stripe::SetupIntent.create({
  customer: 'cus_xxx', # 目标客户ID
  payment_method_types: ['card_present'],
  setup_future_usage: 'off_session', # 声明后续用于自动扣费
})
# 将setup_intent.client_secret返回给iOS端

2. iOS端用读卡器确认SetupIntent

// iOS Swift示例
// 读卡器连接成功后,传入后端返回的clientSecret
let setupParams = STPSetupIntentConfirmParams(clientSecret: clientSecret)
setupParams.paymentMethodParams = STPPaymentMethodCardPresentParams()

STPPaymentHandler.shared().confirmSetupIntent(setupParams, with: self) { status, setupIntent, error in
    switch status {
    case .succeeded:
        // 成功:card类型PaymentMethod已自动绑定到指定客户
        // 通知后端创建订阅即可
    case .failed:
        // 处理失败逻辑
    case .canceled:
        // 处理取消逻辑
    @unknown default:
        break
    }
}

替代方案:用PaymentIntent同时完成首笔支付和保存支付方式

如果需要首笔订阅支付和保存支付方式一步完成,创建PaymentIntent时添加setup_future_usage参数:

# 后端Ruby示例
payment_intent = Stripe::PaymentIntent.create({
  amount: 1000, # 首笔金额,单位分
  currency: 'usd',
  customer: 'cus_xxx',
  payment_method_types: ['card_present'],
  setup_future_usage: 'off_session',
  confirm: false, # 由iOS端读卡器确认
})
# 返回client_secret给iOS端

iOS端确认PaymentIntent后,Stripe自动将card_present转换为card类型PaymentMethod并绑定到客户,之后直接创建订阅:

# 后端创建订阅
subscription = Stripe::Subscription.create({
  customer: 'cus_xxx',
  items: [{ price: 'price_xxx' }],
  # 无需手动指定payment_method,自动使用客户默认支付方式
  payment_behavior: 'default_incomplete',
  expand: ['latest_invoice.payment_intent'],
})

关键注意事项

  • 必须在创建SetupIntent/PaymentIntent时同时指定customer和setup_future_usage: 'off_session',否则无法生成可保存的card类型PaymentMethod
  • 读卡器确认流程和普通支付一致,但需携带setup相关参数配置
  • 订阅创建时无需手动指定支付方式,Stripe会自动使用客户已绑定的默认支付方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:02:14