Skip to content
返回变现与收入

升级 / 降级

如何用对用户公平且易理解的按比例处理周期中计划变更。

为什么

用户需周期中升降级 — 团队扩需更多席位,或缩想少付。难的是按比例:旧计划未用时间收或抵多少。搞错要么惹怒用户(升级收太多)要么漏收(降级抵太慷慨)。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 美元"带一键按钮,无需定价页导航。
  • ✓记每次计划变更及原因(用户发起、限触发、管理员)— 这数据让你学哪些功能驱动升级哪些定价差驱动降级。