如何在Stripe中实现后付费及套餐变更时的按比例计费?
Stripe实现后付费订阅及中途套餐变更按比例计费方案
一、核心结论
你的需求完全可以在Stripe中实现,通过配置订阅账单规则、设置计费模式,结合套餐变更时的参数控制即可达成。
二、具体配置步骤
1. 套餐(Price对象)创建
先搭建两个月度订阅价格,关键要设置后付费模式:
- 创建£5/月基础套餐:
stripe.Price.create( unit_amount=500, # 单位为便士 currency="gbp", recurring={"interval": "month"}, product_data={"name": "基础套餐"}, payment_behavior="default_incomplete" ) - 创建£10/月高级套餐:
stripe.Price.create( unit_amount=1000, currency="gbp", recurring={"interval": "month"}, product_data={"name": "高级套餐"}, payment_behavior="default_incomplete" )
注:payment_behavior: default_incomplete会让订阅创建时不立即扣费,仅在周期结束时生成待付账单。
2. 后付费订阅的初始化
创建订阅时指定后付费规则,同时锚定计费周期到订阅当日:
stripe.Subscription.create( customer="cus_XXX", items=[{"price": "price_基础套餐ID"}], payment_behavior="default_incomplete", billing_cycle_anchor=int(time.time()) # 周期从订阅时刻开始 )
配置完成后,用户订阅基础套餐后,Stripe会在**30天后(月度周期结束)**生成账单,收取该周期的£5费用,完全匹配后付费要求。
3. 中途套餐变更的按比例计费处理
当用户从£5套餐切换到£10套餐时,调用订阅更新接口并设置以下关键参数:
stripe.Subscription.modify( "sub_XXX", items=[{"id": "sub_item_原套餐ID", "price": "price_高级套餐ID"}], proration_behavior="create_prorations", payment_behavior="default_incomplete", billing_cycle_anchor="now" )
参数说明:
proration_behavior="create_prorations":Stripe会自动计算原套餐已使用时长的按比例费用(比如使用15天则生成£2.5的待付账单);billing_cycle_anchor="now":立即启动新的计费周期,新套餐的£10费用会在30天后(新周期结束)收取,保持后付费模式;payment_behavior="default_incomplete":确保所有账单都在周期结束或变更时生成待付状态,不立即扣费。
补充:若需要自定义按比例计费逻辑,可设置proration_behavior="none",手动创建Invoice Item收取对应费用后再更新订阅。
三、关键注意事项
- 需确保客户已绑定并验证支付方式,避免周期结束时扣费失败;
- 通过Stripe Webhook监听
invoice.created和invoice.paid事件,同步处理账单通知和业务状态更新; - Stripe默认按小时计算比例费用,若需按天精度,可在Price的
recurring参数中设置usage_type="licensed",确保按周期天数比例核算。
内容的提问来源于stack exchange,提问作者barok robel
相关产品推荐
相关产品推荐

