如何通过Microsoft Partner Center SDK识别并列出非营利组织客户?
解决Partner Center SDK筛选非营利组织客户的方法
我之前在做类似的Partner Center集成时,也碰到过这个头疼的问题——官方文档确实没明确提,但翻了SDK的源码和内部接口后,找到了可行的方案,分享给你:
核心思路:通过客户资格(Qualifications)识别非营利组织
Partner Center里的非营利客户,本质是拥有Nonprofit类型资格的客户。我们可以通过SDK获取每个客户的资格集合,判断是否包含对应类型来筛选。
具体实现代码
假设你已经初始化好了IAggregatePartner实例(这是Partner Center SDK的核心入口),可以这样写:
using Microsoft.Store.PartnerCenter; using Microsoft.Store.PartnerCenter.Models.Customers; using Microsoft.Store.PartnerCenter.Models.Qualifications; // 初始化Partner Center客户端(这里省略你的认证逻辑,比如用App+User认证) var partner = PartnerService.Instance.CreatePartnerOperations(credentials); // 分页获取所有客户(避免一次性加载过多数据) var customersPage = await partner.Customers.GetAsync(); do { foreach (var customer in customersPage.Items) { try { // 获取该客户的所有资格信息 var qualifications = await customer.Qualifications.GetAsync(); // 检查是否包含非营利相关资格(注意兼容旧类型) var isNonprofit = qualifications.Items.Any(q => q.QualificationType.Equals("Nonprofit", StringComparison.OrdinalIgnoreCase) || q.QualificationType.Equals("MicrosoftNonprofit", StringComparison.OrdinalIgnoreCase)); if (isNonprofit) { // 处理你的非营利客户逻辑 Console.WriteLine($"找到非营利客户:ID={customer.Id}, 名称={customer.CompanyProfile.CompanyName}"); } } catch (Exception ex) { // 处理权限不足或其他异常(比如部分客户可能无法获取资格) Console.WriteLine($"获取客户{customer.Id}资格失败:{ex.Message}"); } } // 翻页获取下一批客户 customersPage = await customersPage.NextPageAsync(); } while (customersPage != null);
关键注意事项
- 权限要求:你的Partner Center应用必须拥有
Customer.ReadWriteAll或Customer.ReadAll的权限,否则会抛出权限不足的异常。 - 兼容旧资格类型:部分早期加入的非营利客户,资格类型可能是
MicrosoftNonprofit而非Nonprofit,所以建议同时检查这两个值。 - 分页处理:如果你的客户数量较多,一定要用分页获取,避免内存溢出或API请求限制。
- 异常处理:个别客户可能因为数据异常无法返回资格信息,记得加异常捕获,避免整个流程中断。
内容的提问来源于stack exchange,提问作者nzrytmn
相关产品推荐
相关产品推荐

