如何在Stripe checkout会话中传入已有订阅信息实现套餐升级,避免新建订阅
Stripe 已有订阅升级(不创建新订阅)的Checkout Session实现方案
Stripe Checkout 原生支持已有订阅更新模式,不需要额外传递自定义参数到前端,只需要在服务端创建Checkout Session时指定更新模式和对应订阅ID即可,实现流程如下:
- 第一步:提前存储用户注册时生成的Stripe客户ID(
customer_id)和对应免费订阅的ID(subscription_id),和你的业务用户账号绑定 - 第二步:服务端创建Checkout Session时,指定
mode为subscription_update,而不是默认创建新订阅的subscription模式 - 第三步:在Session参数的
subscription_update字段中传入要更新的订阅ID,以及差价计算规则、支付行为配置 - 第四步:
line_items字段传入你要升级到的目标付费套餐的价格ID,无需包含原有免费套餐的条目
以下是Node.js环境下的实现示例:
const stripe = require('stripe')('你的Stripe密钥'); const session = await stripe.checkout.sessions.create({ customer: '用户对应的stripe_customer_id', mode: 'subscription_update', line_items: [ { price: '目标付费套餐的price_id', quantity: 1, }, ], subscription_update: { subscription: '要更新的已有免费订阅的subscription_id', // 差价规则:可选none(不补当期差价)、create_prorations(立即补当期差价)、always_invoice proration_behavior: 'create_prorations', // 支付失败时的处理逻辑,可根据业务需求调整 payment_behavior: 'default_incomplete', }, success_url: '升级成功后的跳转地址', cancel_url: '升级取消后的跳转地址', });
注意事项
- 若原有免费套餐没有绑定支付方式,Checkout会自动引导用户添加有效的支付方式并绑定到该订阅,无需额外开发
- 如需调整升级生效时间(比如下个账单周期生效不补差价),将
proration_behavior设为none即可 - 该方案不会生成新的订阅ID,所有变更都会直接作用到你传入的原有订阅上
内容的提问来源于stack exchange,提问作者Rajan
相关产品推荐
相关产品推荐

