You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Stripe 14天免费试用期内添加卡片后支付状态显示‘Incomplete’及自动扣费实现咨询

Stripe 14天免费试用期内添加卡片后支付状态显示‘Incomplete’及自动扣费实现咨询

首先,我完全理解你的困惑——设置了14天试用期让用户后期自由加卡,结果加卡后支付状态显示“Incomplete”,还担心试用期后没法自动扣费,这确实挺闹心的。我来帮你拆解问题根源和具体解决办法:

为什么会出现“Incomplete”状态?

你当前的代码里配置了card: { request_three_d_secure: "automatic" },这个设置的作用是当系统判断需要3D Secure验证时自动触发流程。但这里的核心矛盾是:当用户在试用期内添加卡片时,Stripe会尝试确认支付方法的有效性,但因为订阅还处于试用期(没有立即发起实际扣费),3D Secure的验证流程没有完整走完——毕竟3DS需要用户实时交互完成验证,而此时没有实际的扣费请求来驱动这个流程闭环,所以就会留下“3D Secure attempt incomplete”的提示,最终标记支付状态为Incomplete。

简单说就是:加卡环节只完成了卡片关联,却没走完必要的3DS验证,Stripe认为这个支付方法还没完全“就绪”,所以状态异常。

如何解决并确保试用期后自动扣费?

我给你几个针对性的调整方案,结合你的现有代码来优化:

1. 调整3D Secure的触发时机配置

首先修改Checkout Session的创建代码,把3DS验证的触发时机从“自动”改成“仅在必要时(即实际扣费请求时)”,同时完善订阅的支付行为配置:

const session = await stripe().checkout.sessions.create({
  mode: "subscription",
  payment_method_collection: "if_required",
  subscription_data: {
    trial_period_days: 14,
    // 允许订阅在支付方法未完全确认时保持有效,后期自动重试
    payment_behavior: "default_incomplete",
    payment_settings: {
      // 保存添加的卡片为订阅默认支付方式
      save_default_payment_method: "on_subscription",
      payment_method_options: {
        card: {
          // 只在实际扣费(比如试用期结束时)触发3DS验证
          request_three_d_secure: "when_required"
        }
      }
    }
  },
  // 其他代码逻辑...
});

2. 处理用户添加卡片后的支付方法确认

当用户在试用期内通过Stripe Elements或客户门户添加卡片后,你需要在后端手动触发支付方法的确认流程,确保3DS验证在这个环节完成,而不是等到扣费的时候:

// 用户添加卡片后的后端处理逻辑
const setupIntent = await stripe().setupIntents.create({
  customer: "用户对应的Stripe Customer ID",
  payment_method: "新添加的支付方法ID",
  confirm: true,
  payment_method_options: {
    card: {
      request_three_d_secure: "automatic"
    }
  }
});

这个操作会直接触发3DS验证流程,用户完成验证后,该支付方法会被Stripe标记为“已确认可用”,不会再出现Incomplete的状态。

3. 确保订阅的自动重试机制正常

另外,你需要在Stripe后台确认两个关键配置:

  • 开启订阅自动重试功能:这样如果试用期结束后第一次扣费失败(比如卡片余额不足),Stripe会按照你设置的规则自动重试扣费
  • 检查支付失败通知设置:可以配置自动给用户发邮件提醒,让用户及时更新支付信息

关键注意事项

  • 一定要在试用期内完成支付方法的完整验证(包括3DS),否则试用期后Stripe发起扣费请求时,可能因支付方法未验证而直接失败
  • 可以监听Stripe的customer.subscription.updatedinvoice.payment_failed这两个webhook事件,及时捕获支付异常,比如给用户推送站内信提醒他们重新验证卡片
  • 如果还是有问题,去Stripe后台的Events页面查看具体的支付日志,里面会有更详细的错误原因,能帮你快速定位问题

按照这些步骤调整后,用户在试用期内添加卡片并完成3DS验证后,状态就会恢复正常,试用期结束当天Stripe也会自动发起扣费,完全符合你的预期。

火山引擎 最新活动