如何创建带试用期的Stripe订阅及支付方式确认报错解决
正确实现带7天试用期Stripe订阅的操作步骤
1 报错原因说明
- 第一个报错:后端直接调用
stripe.SetupIntent.confirm时没有关联支付方式,SetupIntent必须绑定支付方式才能完成确认 - 第二个报错:
confirmCardSetup是旧版Card Element的专用确认方法,你使用的是Payment Element,需要调用对应的confirmSetup方法
2 客户端提交阶段正确代码
把你之前的confirmCardSetup逻辑替换为以下代码:
const {setupIntent, error} = await this.stripe.confirmSetup({ elements: this.elements, confirmParams: { // 不需要跳转可设置为null,需要跳转填你的回调页面地址 return_url: null, }, redirect: 'if_required' }); if (error) { // 处理支付方式验证错误,如卡过期、余额不足等场景 console.error(error.message); return; } // 确认成功后,拿到SetupIntent ID和绑定的payment_method ID,传给后端创建订阅 const setupIntentId = setupIntent.id; const paymentMethodId = setupIntent.payment_method; // 调用你的后端接口,传递上述两个参数+用户选择的订阅产品对应ID即可
3 后端创建带7天试用期的订阅
拿到客户端传递的参数后,无需再次确认SetupIntent,直接调用Stripe订阅创建接口,新增trial_period_days参数即可:
subscription = stripe.Subscription.create( customer=当前用户的Stripe客户ID, items=[ { "price": "你的订阅价格ID", # 对应Stripe后台配置的产品价格ID }, ], default_payment_method=paymentMethodId, # 客户端传过来的已验证支付方式ID trial_period_days=7, # 此处设置7天试用期 payment_behavior='default_incomplete', # 可选参数,避免试用期前存在其他收费项时报错 expand=['latest_invoice.payment_intent'], )
你原本无试用期订阅流程的其他参数可以正常保留,仅新增trial_period_days=7即可自动启用试用期,7天后Stripe会自动发起扣款,无需额外逻辑处理。
注意事项
- 试用期内用户取消订阅不会产生任何费用,Stripe默认会发送试用期即将结束的通知,你也可以通过webhook监听
customer.subscription.trial_will_end事件实现自定义提醒 - 确保你创建SetupIntent时的
usage参数保持为off_session,这样试用期结束后Stripe可以自动发起扣款,不需要用户再次操作验证支付方式
内容的提问来源于stack exchange,提问作者rossco
相关产品推荐
相关产品推荐

