Stripe含试用期的一次性付款+续订订阅配置问题求助
问题描述
我们的产品支持客户自助开通,支付结构如下:
- 开通阶段:客户支付1500美元初始费用,包含15天试用期,试用期结束后可使用平台服务1年。
- 续订阶段:初始服务年结束后,客户每年支付1000美元续订费用。
我尝试用Stripe的Phase选项创建订阅时失败,提示未配置定期付款,但第二个产品已设置为定期付款。以下是我生成Checkout Session链接的代码,未达到预期效果:
public async Task<string> GetStripeSessionLink() { StripeConfiguration.ApiKey = "<<API_KEY>>"; var options = new Stripe.Checkout.SessionCreateOptions { PaymentMethodTypes = new List<string>() { "card" }, SubscriptionData = new SessionSubscriptionDataOptions { TrialSettings = new Stripe.Checkout.SessionSubscriptionDataTrialSettingsOptions { EndBehavior = new Stripe.Checkout.SessionSubscriptionDataTrialSettingsEndBehaviorOptions { MissingPaymentMethod = "cancel", }, }, TrialPeriodDays = 1, }, LineItems = new List<SessionLineItemOptions> { new SessionLineItemOptions { Price = "price_1O9j4cSERQQSOAmawe834DECNSRnKmYzDsX", Quantity = 1, }, new SessionLineItemOptions { Price = "price_1OAYkVSERQQSOA454SfgrVs44mR1TpitOov", Quantity = 1 }, }, Mode = "subscription", SuccessUrl = "http://localhost:4300/dashboard", CancelUrl = "http://localhost:4300/register/cancel", AllowPromotionCodes = true, CustomerEmail = "abcxyz@gmail.com", }; var service = new Stripe.Checkout.SessionService(); var session = service.Create(options); return session.Url; }
请问应如何正确配置Stripe以实现上述支付方案?是否需要先创建订阅,待试用期结束后转为订阅计划?或是先创建初始付款订阅,试用期结束后收取1500美元,取消当前订阅再为客户开通年度续订订阅?
解决方案
核心思路:用Stripe订阅的**阶段(Phases)**功能实现阶梯式定价,无需拆分或切换订阅
你的需求本质是订阅的两个阶梯阶段,直接用Phases配置即可,无需额外的订阅切换操作。之前报错的核心原因是Phase的配置逻辑错误,需确保每个阶段关联的价格为定期类型,并正确设置阶段时间范围。
正确配置步骤:
创建两个定期价格:
- 初始服务价格:1500美元,计费周期设为1年,确保为**定期(recurring)**类型
- 续订价格:1000美元,计费周期设为1年,同样为定期类型
通过Phases构建完整订阅流程:
- 第一阶段:设置15天试用期,试用期结束后自动收取1500美元,同时提供1年服务
- 第二阶段:第一阶段结束后,自动切换到1000美元/年的续订价格,按年自动续费
修改后的代码:
public async Task<string> GetStripeSessionLink() { StripeConfiguration.ApiKey = "<<API_KEY>>"; var options = new Stripe.Checkout.SessionCreateOptions { PaymentMethodTypes = new List<string> { "card" }, Mode = "subscription", SuccessUrl = "http://localhost:4300/dashboard", CancelUrl = "http://localhost:4300/register/cancel", AllowPromotionCodes = true, CustomerEmail = "abcxyz@gmail.com", SubscriptionData = new SessionSubscriptionDataOptions { TrialSettings = new SessionSubscriptionDataTrialSettingsOptions { EndBehavior = new SessionSubscriptionDataTrialSettingsEndBehaviorOptions { MissingPaymentMethod = "cancel", // 试用期结束无有效支付方式则取消订阅 } }, // 用Phases替代多LineItem配置,实现阶梯订阅 Phases = new List<SessionSubscriptionDataPhaseOptions> { // 第一阶段:15天试用期 + 1500美元/年服务 new SessionSubscriptionDataPhaseOptions { TrialPeriodDays = 15, Items = new List<SessionSubscriptionDataPhaseItemOptions> { new SessionSubscriptionDataPhaseItemOptions { Price = "price_1O9j4cSERQQSOAmawe834DECNSRnKmYzDsX", // 1500美元/年价格ID Quantity = 1 } }, // 阶段总时长:15天试用期 + 1年服务期 EndDate = DateTime.UtcNow.AddDays(15 + 365).ToUnixTimeSeconds() }, // 第二阶段:自动续订1000美元/年 new SessionSubscriptionDataPhaseOptions { Items = new List<SessionSubscriptionDataPhaseItemOptions> { new SessionSubscriptionDataPhaseItemOptions { Price = "price_1OAYkVSERQQSOA454SfgrVs44mR1TpitOov", // 1000美元/年价格ID Quantity = 1 } } } } } }; var service = new Stripe.Checkout.SessionService(); var session = service.Create(options); return session.Url; }
关键注意事项:
- 两个关联的Price必须均为**定期(recurring)**类型,且计费周期一致(均为1年),否则Phase配置会触发报错
- 第一阶段的
EndDate需包含试用期和服务期的总时长,确保阶段结束后自动切换到第二阶段 - 试用期结束时,Stripe会自动尝试收取1500美元,若支付失败则按
TrialSettings.EndBehavior配置处理(示例中为取消订阅) - 第二阶段无需设置EndDate,Stripe会自动按价格的计费周期无限续订
内容的提问来源于stack exchange,提问作者Gopi
相关产品推荐
相关产品推荐

