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

Stripe订阅:如何在订阅期中途赠送1个月免费时长?

Stripe订阅延长计费周期解决方案(推荐赠时长场景)

针对你需要实现的「推荐成功后为6个月订阅用户延长1个月免费时长,保持原定价与后续计费周期」的需求,以下是两种可行的Stripe实现方案:

方案一:直接更新订阅周期结束时间(单次延长首选)

通过修改订阅的current_period_end字段,直接延后当前计费周期的结束时间,同时设置不产生任何额外费用,后续计费将自动沿用原6个月周期规则。

代码示例(Python SDK)

import stripe
from datetime import datetime
from dateutil.relativedelta import relativedelta

stripe.api_key = "sk_test_你的密钥"

# 获取目标订阅
subscription = stripe.Subscription.retrieve("sub_XXX")

# 计算新的周期结束时间:原结束时间+1个月
current_end_dt = datetime.fromtimestamp(subscription.current_period_end)
new_end_dt = current_end_dt + relativedelta(months=1)
new_end_ts = int(new_end_dt.timestamp())

# 更新订阅
updated_sub = stripe.Subscription.modify(
    subscription.id,
    current_period_end=new_end_ts,
    proration_behavior="none"  # 禁止产生 prorate 费用,确保免费延长
)

该方案的效果完全匹配你的需求:

  • 原1月1日开通的6个月订阅,原结束时间7月1日,修改后变为8月1日
  • 8月1日将自动按原6个月定价扣费,下一次计费日期为次年2月1日
  • 全程无额外扣费,无需修改定价

方案二:使用订阅日程(多次/复杂延长场景)

如果需要支持多次推荐、多次延长周期的场景,使用Stripe订阅日程(Subscription Schedule)可以更灵活地管理订阅的多个阶段。

代码示例(Python SDK)

import stripe
from datetime import datetime
from dateutil.relativedelta import relativedelta

stripe.api_key = "sk_test_你的密钥"

subscription = stripe.Subscription.retrieve("sub_XXX")

# 创建基于现有订阅的日程,调整当前阶段结束时间,后续保持原周期
schedule = stripe.SubscriptionSchedule.create(
    from_subscription=subscription.id,
    phases=[
        # 第一阶段:延长当前周期1个月
        {
            "start_date": subscription.current_period_start,
            "end_date": int((datetime.fromtimestamp(subscription.current_period_end) + relativedelta(months=1)).timestamp()),
            "items": [
                {"price": subscription.items.data[0].price.id, "quantity": 1}
            ],
            "proration_behavior": "none"
        },
        # 后续阶段:保持原6个月订阅规则
        {
            "items": [
                {"price": subscription.items.data[0].price.id, "quantity": 1}
            ],
            "interval": "month",
            "interval_count": 6
        }
    ]
)

注意事项

  • 计算1个月时长时,使用relativedelta(months=1)比固定秒数更准确,能自动适配不同月份的天数差异
  • 若用户是预付费订阅(已支付6个月费用),proration_behavior="none"会确保延长周期不会产生任何扣费
  • 之前使用的pause_collection仅能暂停计费,无法延长订阅周期,因此不适用于你的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:30:28