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

如何使用Stripe Checkout API(C#)设置订阅结束日期

实现Stripe 12个月到期自动取消的订阅

要实现仅12个月的订阅,Stripe Checkout API本身无法直接在创建Session时设置订阅结束日期,但可以通过以下两种可靠方式实现:

方法1:使用订阅计划(Subscription Schedule)推荐

订阅计划可以预先定义订阅的周期和结束行为,用户完成付款后会自动按计划执行,到期即取消。

修改你的代码,先创建订阅计划,再关联到Checkout Session:

var baseUrl = $"{_configuration["BaseURL"]}";

// 1. 创建订阅计划,定义12个月周期后取消
var scheduleOptions = new SubscriptionScheduleCreateOptions
{
    StartDate = "now",
    EndBehavior = "cancel", // 到期后自动取消订阅
    Phases = new List<SubscriptionSchedulePhaseOptions>
    {
        new SubscriptionSchedulePhaseOptions
        {
            Items = new List<SubscriptionSchedulePhaseItemOptions>
            {
                new SubscriptionSchedulePhaseItemOptions
                {
                    PriceData = new SubscriptionSchedulePhaseItemPriceDataOptions
                    {
                        UnitAmount = (long)19.99 * 100,
                        Currency = "gbp",
                        ProductData = new SubscriptionSchedulePhaseItemPriceDataProductDataOptions
                        {
                            Name = "subscription"
                        },
                        Recurring = new SubscriptionSchedulePhaseItemPriceDataRecurringOptions
                        {
                            Interval = "month",
                            IntervalCount = 1
                        }
                    },
                    Quantity = 1
                }
            },
            Iterations = 12 // 运行12个月度周期,即12个月
        }
    }
};

var scheduleService = new SubscriptionScheduleService();
var schedule = scheduleService.Create(scheduleOptions);

// 2. 创建Checkout Session并关联订阅计划
var options = new SessionCreateOptions
{
    Mode = "subscription",
    SuccessUrl = $"{baseUrl}/payment/success/?session_id=" + "{CHECKOUT_SESSION_ID}",
    CancelUrl = $"{baseUrl}/payment/cancelled",
    CustomerEmail = customerEmail,
    SubscriptionData = new SessionSubscriptionDataOptions
    {
        Schedule = schedule.Id // 关联刚才创建的订阅计划
    }
};

// 后续创建Session的代码...

方法2:通过Webhook设置订阅结束日期

如果不想用订阅计划,可以在用户完成付款后,通过Stripe Webhook监听checkout.session.completed事件,获取创建的订阅ID,再调用API设置结束日期:

  1. 先确保你的后端已经配置了Stripe Webhook,监听checkout.session.completed事件
  2. 在事件处理逻辑中添加以下代码:
// 从Webhook事件中获取订阅ID
var subscriptionId = event.Data.Object.SubscriptionId;

// 设置12个月后的Unix时间戳作为结束日期
var endDate = DateTime.UtcNow.AddMonths(12).ToUnixTimeSeconds();

var subscriptionService = new SubscriptionService();
var updateOptions = new SubscriptionUpdateOptions
{
    EndDate = endDate
};

subscriptionService.Update(subscriptionId, updateOptions);

注意:EndDate必须设置为未来的时间,且要晚于当前订阅周期的结束时间,否则Stripe会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:30:16