Stripe Checkout能否创建不自动续费的订阅产品?
问题
我用React和Firebase搭建了一款应用,还集成了「Run Payments with Stripe」Firebase扩展,通过Stripe Checkout售卖24小时服务使用许可。
目前产品在Stripe里设为「一次性」收费,但有两个问题:
- Stripe在Firestore的
payments集合创建的文档里没有激活状态和周期结束时间(买订阅时,Stripe会自动在subscriptions集合的文档里添加激活信息)。 - 没有额外代码和Firestore读写操作的话,用户没法提前取消激活期,也很难实现续期功能。
我想把产品设为「每日循环计费」模式,但不想实际产生续费。想问下Stripe里能不能创建不自动续费的订阅产品?(可以通过Stripe后台设置或者创建Checkout会话时传参数实现)
解决方案
完全可以创建不自动续费的订阅产品,两种实现方式:
1. Stripe后台设置
- 先在Stripe后台创建一个订阅型产品,定价设置为「每日循环」。
- 进入定价详情页,找到「订阅设置」,开启「一次性计费(不自动续费)」选项。这样用户购买后只会被扣一次费,订阅到期后不会自动续订。
2. 创建Checkout会话时传参数
如果不想修改后台产品设置,也可以在调用Stripe API创建Checkout会话时,通过参数强制关闭自动续费:
- 在创建会话的
line_items对应项中,添加subscription_data字段并设置cancel_at_period_end: true。这样订阅创建后就会被标记为到期不续订,用户只会被收取一次费用。 - 示例代码片段:
const session = await stripe.checkout.sessions.create({ payment_method_types: ['card'], line_items: [ { price: '你的订阅定价ID', quantity: 1, }, ], mode: 'subscription', subscription_data: { cancel_at_period_end: true, // 关键参数:到期自动取消,不触发续费 }, success_url: '你的成功跳转地址', cancel_url: '你的取消跳转地址', });
额外说明
采用这种订阅模式后,Firebase扩展会自动在subscriptions集合生成包含激活状态、周期结束时间的文档,刚好能解决你之前遇到的问题:
- 可直接从
subscriptions文档获取激活状态和到期时间,无需额外处理payments集合。 - 提前取消激活期可通过调用Stripe API的
stripe.subscriptions.update()设置cancel_at_period_end: true实现;续期则只需创建新的Checkout会话让用户再次购买,扩展会自动更新或新增订阅文档。
内容的提问来源于stack exchange,提问作者Alexdlf
相关产品推荐
相关产品推荐

