如何在Stripe中合并多订阅为单订阅并实现无比例计费?
Stripe合并订阅实现预期计费的最优方案
要实现你描述的计费流程(当月15号收新项目全额10美元,后续每月15号统一收30美元),可以通过一次性发票项+订阅更新调整计费锚点的组合方案解决,完美避开你遇到的两种问题:
具体操作步骤
1. 收取新项目当月全额费用
通过创建**一次性发票项(One-time Invoice Item)**直接收取10美元,绕过订阅添加项目时的按比例计费逻辑:
import stripe # 初始化Stripe客户端(替换为你的密钥) stripe.api_key = "sk_test_your_secret_key" # 创建一次性发票项 invoice_item = stripe.InvoiceItem.create( customer="cus_XXXXXX", # 目标客户ID price="price_10DollarItem", # 对应10美元项目的价格ID quantity=1 ) # 立即生成发票并自动扣费 invoice = stripe.Invoice.create( customer="cus_XXXXXX", collection_method="charge_automatically", auto_advance=True # 自动完成发票并发起支付 )
这一步会直接在当月向客户收取10美元的新项目费用,没有按比例折算。
2. 更新现有订阅,合并项目并调整计费周期
更新原有20美元的订阅,添加10美元的项目,同时关闭按比例计费、调整计费锚点到当月15号:
import time from datetime import datetime # 计算当月15号的UTC时间戳(示例:2024年5月15日) target_date = datetime(2024, 5, 15, 0, 0, 0) billing_cycle_anchor = int(time.mktime(target_date.timetuple())) # 更新订阅 updated_sub = stripe.Subscription.update( "sub_XXXXXX", # 原有20美元订阅的ID items=[ # 保留原有订阅项 { "id": "si_XXXXXX", # 原有订阅项ID "price": "price_20DollarPlan" }, # 添加新项目 { "price": "price_10DollarItem" } ], proration_behavior="none", # 禁止生成按比例费用 billing_cycle_anchor=billing_cycle_anchor, # 设置后续计费锚点为当月15号 payment_behavior="default_incomplete" # 避免意外触发额外扣费 )
这一步完成后:
- 原有订阅和新项目合并为单份订阅
- 后续每月15号会自动扣除30美元(20+10)
- 不会重复收取1号已经支付的20美元费用
方案优势对比
- 避开按比例计费:通过一次性发票项全额收取当月新项目费用,不用只收5美元
- 避免重复扣费:调整计费锚点仅改变后续周期,不会回溯重复收取已支付的原有订阅费用
- 实现统一计费:合并后单份订阅每月15号扣费,符合你“每月仅支付一次”的需求
内容的提问来源于stack exchange,提问作者shub
相关产品推荐
相关产品推荐

