You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已存在订阅计划时,如何处理Stripe订阅升级?

Stripe订阅场景下「带降级计划时主套餐升级」的官方最优方案

问题核心矛盾

已有附加组件降级订阅计划时,直接修改订阅计划阶段升级主套餐,会生成1小时后自动收款的草稿发票,且变更不依赖支付状态就生效,不符合「支付成功才生效」的需求;但订阅计划本身不支持payment_behavior=pending_if_incomplete参数。

官方推荐方案:阶段调整+发票事件触发生效

无需走「释放计划→更新订阅→重建计划」的繁琐流程,通过以下步骤实现:

  1. 修改订阅计划当前阶段时,强制生成即时可收款发票
    更新订阅计划的当前阶段(替换为主套餐升级后的价格)时,通过invoice_settings参数禁用草稿发票,同时指定proration_behavior=always_invoice:

    stripe.SubscriptionSchedule.modify(
      "sub_sched_xxxx",
      phases=[
        {
          "items": [
            {"price": "UPGRADED_MAIN_PLAN_ID", "quantity": 1},
            # 保留原附加组件的降级计划配置
            {"price": "ADDON_PLAN_ID", "quantity": 1}
          ],
          "start_date": "now",
          "invoice_settings": {
            "collection_method": "charge_automatically",
            "days_until_due": 0
          }
        }
      ],
      proration_behavior="always_invoice"
    )
    

    此操作会立即生成待支付发票而非草稿,Stripe会尝试即时扣款。

  2. 通过Webhook监听支付状态,控制变更生效时机

    • 默认订阅计划的阶段变更不会立即生效,需等待支付确认后触发
    • 监听invoice.paid事件:收到后再次调用SubscriptionSchedule.modify,将当前阶段的start_date设为now,强制变更立即生效
    • 监听invoice.payment_failed事件:若支付失败,回滚订阅计划阶段配置到升级前状态
  3. 保留原有降级计划
    主套餐升级生效后,原有附加组件的降级阶段配置会保留在订阅计划中,无需重新创建。

备选简化方案:即时订阅变更+计划导入

如果上述方案适配复杂,可采用:

  • 先对当前订阅执行即时升级,传入payment_behavior=pending_if_incomplete和prorate_behavior=always_invoice,确保支付成功才变更订阅
  • 支付成功后,调用SubscriptionSchedule.create将升级后的订阅导入为新计划,并追加原附加组件的降级阶段配置

这种方式既满足升级的支付生效逻辑,又能保留后续的降级计划安排。

内容的提问来源于stack exchange,提问作者DrakkoFire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:58:11