Stripe .NET技术问题:Subscription对象无PaymentIntent.ClientSecret属性
解决Stripe .NET 48.5.0无法获取subscription.LatestInvoice.PaymentIntent.ClientSecret的问题
确认Expands参数的正确格式
Stripe API的展开字段用蛇形命名,即便.NET模型是驼峰命名,你在Expand列表里必须写API原生的字段名:var getOptions = new SubscriptionGetOptions { Expand = new List<string> { "latest_invoice.payment_intent" } }; var subscription = await Stripe.Subscriptions.GetAsync("sub_xxx", getOptions);别写成
LatestInvoice.PaymentIntent,这是.NET模型的命名,Stripe API识别不了。先判空再访问属性
不是所有订阅的最新发票都关联了PaymentIntent(比如免费订阅、未触发支付的订阅),直接访问会触发空引用异常,先做判断:if (subscription.LatestInvoice != null && subscription.LatestInvoice.PaymentIntent != null) { var clientSecret = subscription.LatestInvoice.PaymentIntent.ClientSecret; // 后续业务逻辑 }核对API版本兼容性
Stripe .NET 48.5.0默认的API版本可能偏旧,你需要确保使用的API版本支持从订阅展开latest_invoice.payment_intent。可以在初始化时指定兼容的API版本:StripeConfiguration.ApiVersion = "2024-06-20"; // 选择一个较新的稳定版本或者在Stripe Dashboard的「开发者设置」里调整默认API版本,确保版本不低于2019-03-14(该版本开始支持该展开路径)。
验证返回的原始数据
调试时可以查看订阅对象的RawJson属性,确认API是否返回了latest_invoice.payment_intent字段。如果RawJson里没有,说明展开参数没生效或者API版本不支持;如果有但.NET模型没映射,若必须使用48.5.0版本,就重点检查前三点,也可以尝试升级Stripe .NET包到更近期的稳定版。
问题截图:
内容的提问来源于stack exchange,提问作者Dživo Jelić
相关产品推荐
相关产品推荐

