如何在Stripe中实现月度订阅金额上限触发转年度订阅?
基于Stripe Subscription Schedule实现月度转年度订阅(年付费上限$30)
方案一:累计金额达标后转现有年度订阅
操作步骤
- 创建带累计金额限制的月度订阅Schedule
调用Stripe Subscription Schedule创建接口,初始阶段配置$2.5/月的月度计划,通过元数据记录累计金额上限($30),不限制月度阶段的迭代次数,直到触发切换条件:stripe.SubscriptionSchedule.create( customer="cus_XXX", start_date="now", phases=[ { "items": [{"price": "price_monthly_2.5", "quantity": 1}], "iterations": None, "proration_behavior": "none", "metadata": {"cumulative_limit": 3000} # 单位为分,对应$30 } ], default_settings={ "payment_behavior": "default_incomplete", "payment_method_types": ["card"] } ) - 监听支付事件并判断累计金额
监听Stripe的invoice.paid事件,每次用户完成月度支付后,在业务侧累加支付金额。当累计达到$30时,调用Schedule更新接口,切换到现有$30/年的年度订阅阶段:stripe.SubscriptionSchedule.update( "sub_sched_XXX", phases=[ { "items": [{"price": "price_yearly_30", "quantity": 1}], "start_date": "now", "iterations": None, # 后续自动按年度续费 "proration_behavior": "none" } ], end_behavior="release" # 释放Schedule,转为常规年度订阅 ) - 处理计费周期调整与用户确认
切换前通过用户预留邮箱发送确认通知,告知即将转为年度订阅,同时将年度订阅的计费锚点设为当前日期。若用户取消确认,则终止Schedule,保留月度订阅但限制后续支付(确保累计金额不超$30)。
方案二:创建单一订阅产品,达标后调整计费锚点转为年度周期
操作步骤
- 创建关联双阶段Schedule的新订阅产品
新建定价为$2.5/月的月度产品,并关联年度价格$30/年。创建Schedule时设置两个阶段:第一阶段为月度计划(无迭代次数限制),第二阶段为年度计划(满足累计金额条件后自动触发):stripe.SubscriptionSchedule.create( customer="cus_XXX", start_date="now", phases=[ { "items": [{"price": "price_new_monthly_2.5", "quantity": 1}], "iterations": None, "metadata": {"cumulative_limit": 3000} }, { "items": [{"price": "price_new_yearly_30", "quantity": 1}], "start_date": "auto", # 满足条件后自动启动 "iterations": None, "proration_behavior": "none" } ], default_settings={ "payment_behavior": "default_incomplete", "payment_method_types": ["card"] } ) - 自动触发阶段切换并调整计费锚点
当累计支付金额达标后,Stripe会自动切换到年度阶段。此时调用Schedule更新接口,将年度订阅的计费锚点设为当前日期,确保后续续费周期从切换日开始:stripe.SubscriptionSchedule.update( "sub_sched_XXX", phases=[ { "items": [{"price": "price_new_yearly_30", "quantity": 1}], "start_date": "now", "billing_cycle_anchor": "now", "iterations": None } ] ) - 维护单一产品体系
该方案下用户全程关联同一个订阅产品,切换后无需跳转至其他现有产品,简化后台管理。需确保产品的月度、年度价格已正确关联,保证Schedule阶段切换的无缝性。
Subscription Schedule核心知识点(翻译自官方文档)
- Subscription Schedule用于管理订阅的多阶段生命周期,支持自定义每个阶段的定价、计费周期、触发条件。
- 阶段切换可通过
start_date: auto结合业务侧逻辑触发,或手动调用API更新。 - Stripe不直接提供累计支付金额统计,需在业务侧自行维护用户的支付累计数据。
- 切换阶段时设置
proration_behavior: none可避免产生 prorated 费用,确保用户不会多付。
内容的提问来源于stack exchange,提问作者ralpopo
相关产品推荐
相关产品推荐

