在C# MVC中使用Stripe API实现促销代码兑换功能的问题咨询
问题原因
PromotionCodeService 是 Stripe.net v39.0.0 版本才正式加入的服务,无法访问通常是因为你当前使用的 Stripe.NET SDK 版本低于该要求,和 ProductService、CouponService 不同,旧版本SDK没有内置这个服务类。
解决步骤
- 首先升级你的 Stripe.NET SDK 到最新稳定版,直接在Nuget包管理器中搜索
Stripe.net完成更新即可。 - 确认你已经引入了正确的命名空间:
using Stripe;
完整实现示例
以下是从校验促销码到应用到订阅的全流程代码:
1. 初始化Stripe配置
// 全局只需要初始化一次即可,建议放在项目启动配置中 StripeConfiguration.ApiKey = "你的Stripe私钥 sk_xxxxxx";
2. 检索并校验促销码有效性
var promotionCodeService = new PromotionCodeService(); // 如果是用promo_开头的ID直接查询 var promotionCode = promotionCodeService.Get("promo_1HMxuf2eZvKYlo2CmGXSyhRx"); // 如果你拿到的是用户输入的明文促销码(比如SUMMER2024),用如下方式查询 // var listOptions = new PromotionCodeListOptions // { // Code = userInputPromoStr, // Active = true // }; // var promotionCode = promotionCodeService.List(listOptions).FirstOrDefault(); // 校验促销码可用性 if (promotionCode == null || !promotionCode.Active || (promotionCode.ExpiresAt.HasValue && promotionCode.ExpiresAt < DateTime.UtcNow) || (promotionCode.MaxRedemptions.HasValue && promotionCode.TimesRedeemed >= promotionCode.MaxRedemptions)) { // 此处添加促销码无效的业务逻辑 throw new InvalidOperationException("当前促销码无效或已超出使用限制"); }
3. 应用促销码到订阅
场景1:创建新订阅时应用
var subscriptionService = new SubscriptionService(); var subCreateOptions = new SubscriptionCreateOptions { Customer = "cus_你的客户ID", Items = new List<SubscriptionItemOptions> { new SubscriptionItemOptions { Price = "price_你的订阅价格ID", Quantity = 1 } }, PromotionCode = promotionCode.Id, // 其他订阅配置 }; var newSubscription = subscriptionService.Create(subCreateOptions);
场景2:给已有订阅添加折扣
var subUpdateOptions = new SubscriptionUpdateOptions { PromotionCode = promotionCode.Id, // 可根据需求配置是否立即对当期账单生效 ProrationBehavior = "create_prorations" }; var updatedSubscription = subscriptionService.Update("sub_你的现有订阅ID", subUpdateOptions);
注意事项
- 不需要手动计算折扣金额,Stripe会根据促销码关联的Coupon规则自动计算抵扣金额,直接应用到订阅账单即可。
- 促销码的使用限制(比如单用户限兑1次、总兑换上限)Stripe会自动校验,你也可以手动加校验逻辑做前端提示。
内容的提问来源于stack exchange,提问作者DarkW1nter
相关产品推荐
相关产品推荐

