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

通过Stripe客户门户更新订阅时如何迁移剩余试用天数

Stripe订阅试用期升降级保留剩余试用天数解决方案

Stripe客户门户默认的订阅升降级规则确实会直接终止当前试用期,想要保留剩余试用时长可以按以下方案实现:

  • 优先推荐通过Webhook异步处理,无需修改现有客户portal的配置:
    1. 配置监听customer.subscription.updated事件,收到事件后首先比对变更前后的订阅商品ID,确认是升降级操作
    2. 提取原订阅的trial_end时间戳,减去当前时间戳得到剩余的试用秒数,仅当剩余秒数大于0时执行后续操作
    3. 调用Stripe订阅更新接口,给新的订阅设置trial_end为「当前时间戳+剩余试用秒数」,同时设置proration_behavior为none,避免产生分段计费账单

注意:需要在Stripe后台开启Webhook事件的previous_attributes返回配置,才能拿到变更前的订阅trial_end字段

  • 如果你后续计划自定义订阅管理页面,也可以不走默认客户门户的升降级逻辑,用户提交升降级申请时直接计算剩余试用天数,创建新订阅时直接传入trial_end参数,逻辑更加可控,无需额外处理Webhook事件。

附核心实现代码示例(Node.js):

// customer.subscription.updated 事件处理逻辑
const stripe = require('stripe')('你的Stripe密钥');

exports.handleSubscriptionUpdate = async (event) => {
  const newSub = event.data.object;
  const prevSub = event.data.previous_attributes;

  // 校验是否为试用期内的升降级操作
  if (!prevSub.items || !prevSub.trial_end || prevSub.trial_end < Date.now()/1000) return;

  const remainingTrial = prevSub.trial_end - Math.floor(Date.now()/1000);
  if (remainingTrial <= 0) return;

  // 更新新订阅试用时长
  await stripe.subscriptions.update(
    newSub.id,
    {
      trial_end: Math.floor(Date.now()/1000) + remainingTrial,
      proration_behavior: 'none',
      payment_behavior: 'default_incomplete'
    }
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:57:02