Stripe订阅查询返回Null问题排查(ASP.NET+C#)
问题排查与解决方案
第一个查询方法的问题与修复
你当前的代码存在两个核心问题:
CustomerService.Search返回的是SearchResult<Customer>结果集,不是单个Customer对象,直接调用ToString()无法展示内部的订阅数据;- Expand字段路径错误,针对搜索结果集里的客户订阅,正确的Expand路径是
data.subscriptions,你添加的customer.subscriptions是多余且无效的。
修复后的代码:
void Go(Object sender, EventArgs e) { StripeConfiguration.ApiKey = "sk_test_mysecretkey"; var options = new CustomerSearchOptions { Query = "email:'isaacsurban@gmail.com'", }; // 正确指定Expand路径,展开结果集中每个客户的订阅数据 options.AddExpand("data.subscriptions"); var service = new CustomerService(); // 仅调用一次Search并保存结果 var searchResult = service.Search(options); // 获取匹配的第一个客户 var targetCustomer = searchResult.Data.FirstOrDefault(); if (targetCustomer != null) { if (targetCustomer.Subscriptions?.Data != null && targetCustomer.Subscriptions.Data.Any()) { Message.Text = $"找到{targetCustomer.Subscriptions.Data.Count}个订阅"; // 如需查看订阅详情,可遍历targetCustomer.Subscriptions.Data } else { Message.Text = "该客户无有效订阅"; } } else { Message.Text = "未找到匹配邮箱的客户"; } }
第二个查询方法的问题与修复
你错误地用 metadata['customer'] 作为查询条件,Stripe订阅对象本身自带 customer 字段(直接关联客户ID),不需要从metadata中查询。同时同样存在未正确处理搜索结果集的问题。
修复后的代码:
void GetSubs(Object sender, EventArgs e) { StripeConfiguration.ApiKey = "sk_test_mysecretkey"; var options = new SubscriptionSearchOptions { // 直接匹配订阅的customer字段 Query = "customer:'cus_mycustid'", // 如需包含已删除的订阅,可添加条件:Query = "customer:'cus_mycustid' AND status:'all'" }; var service = new SubscriptionService(); var searchResult = service.Search(options); if (searchResult.Data.Any()) { Message2.Text = $"找到{searchResult.Data.Count}个订阅"; // 遍历searchResult.Data可获取每个订阅的详细信息 } else { Message2.Text = "未找到该客户的订阅"; } }
额外排查点
- 确认使用的测试环境API Key正确,未混淆生产环境Key;
- 若后台看到的订阅是已删除状态,需在查询条件中添加
status:'all',默认搜索不会返回已删除的订阅; - 建议升级到最新稳定版的Stripe.NET SDK,避免旧版本的字段路径或API兼容性问题。
内容的提问来源于stack exchange,提问作者PowerFit141
相关产品推荐
相关产品推荐

