升级 / 降级
如何用对用户公平且易理解的按比例处理周期中计划变更。
为什么
用户需周期中升降级 — 团队扩需更多席位,或缩想少付。难的是按比例:旧计划未用时间收或抵多少。搞错要么惹怒用户(升级收太多)要么漏收(降级抵太慷慨)。Stripe 用 proration_behavior='create_prorations' 替你算,但你须理解它做什么以便向用户解释并处理边界。关键决策:(1) 立即收按比例还是下张发票,(2) 降级立即生效还是期末,(3) 跨计费周期边界怎么处理。面向用户的规则应简单:"升级立即生效,降级当前期末生效"— 这是最常见且最少意外的策略。
何时使用
当你有不止一个计划时。上线前建好升降级流程 — 用户第一天就会试着改计划。
如何做
1. 定策略:升级立即生效按比例现在收;降级期末生效(不按比例不抵扣)— 这是 Stripe 默认且最少意外 2. 升级:调 stripe.subscriptions.update 带新 price_id 和 proration_behavior='create_prorations' — Stripe 算未用时间抵扣和新计划按比例并净成即时发票 3. 降级:调 stripe.subscriptions.update 带新 price_id 和 proration_behavior='none' 和 billing_cycle_anchor='unchanged' — 降级下续费生效,无即时收费 4. 变更前给用户确认屏:"升级到 Pro — 今天收 18.50 美元(按比例)下周期起 29 美元/月"— 绝不让计划变无清晰预览发生 5. 变更后发收据邮件带按比例明细 — 用户转发给财务,明细防"为何收 X 美元"工单 6. 席位计划,席位增删与计划变更分开处理 — 周期中加席位是按比例,删席位期末生效 7. 分别跟踪升级和降级漏斗 — 高降级率信号定价问题(计划差太远)高升级率信号产品市场契合好 8. 绝不自动降级撞限用户 — 改在 app 内提示升级;静默降级像惩罚
示例
// 升级:立即,按比例
async function upgrade(subId: string, newPriceId: string) {
const sub = await stripe.subscriptions.update(subId, {
items: [{ id: (await stripe.subscriptions.retrieve(subId)).items.data[0].id, price: newPriceId }],
proration_behavior: "create_prorations",
});
// Stripe 为按比例差额创即时发票
return sub;
}
// 降级:期末生效,不按比例
async function downgrade(subId: string, newPriceId: string) {
const sub = await stripe.subscriptions.update(subId, {
items: [{ id: (await stripe.subscriptions.retrieve(subId)).items.data[0].id, price: newPriceId }],
proration_behavior: "none",
billing_cycle_anchor: "unchanged",
});
return sub;
}
// 收费前预览按比例(Stripe Invoice Upcoming Preview)
const preview = await stripe.invoices.retrieveUpcoming({
subscription: subId,
subscription_items: [{ id: itemId, price: newPriceId }],
proration_behavior: "create_prorations",
});
// preview.total_prorations_inclusive_cents → 给用户看"今天收 X 美元"常见问题
- ⚠升级收全价新计划而非按比例 — 29 美元计划第 29 天升级到 99 美元被收 99,实付 128。始终按比例。
- ⚠降级立即生效带抵扣 — 用户降级得 18 抵扣然后忘了;下月抵扣还在财务困惑。期末降级。
- ⚠确认前不预览收费 — 用户点"升级"见 47 美元意外收费然后争议。始终先在确认屏展示按比例额。
最佳实践
- ✓用 Stripe retrieveUpcoming 发票预览在用户确认前展示确切收费 — 消除 95% "意外收费"支持工单。
- ✓让升级从 app 内限提示一键 — 用户撞项目限时显示"升级 Pro 本月多 18 美元"带一键按钮,无需定价页导航。
- ✓记每次计划变更及原因(用户发起、限触发、管理员)— 这数据让你学哪些功能驱动升级哪些定价差驱动降级。