You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Microsoft Partner Center API获取客户订阅时出现500错误

调用Microsoft Partner Center API获取客户订阅返回HTTP 500内部服务器错误排查

问题场景

作为微软直接合作伙伴,使用Get-PartnerCustomerSubscription PowerShell命令可正常获取客户订阅,但手动调用Partner Center API的GET请求获取指定客户订阅时,返回HTTP 500内部服务器错误。相关代码及错误信息如下:

调用代码

$CustomerId = "CUSTOMERIDOFCUSTOMERINCSPPORTAL"

$Headers = @{
    "Authorization" = "Bearer $($PartnerRefreshToken)"
    "Accept" = "application/json"
}

$SubsUri = "https://api.partnercenter.microsoft.com/v1/customers/$CustomerId/subscriptions"
$SubsUriResponse = Invoke-RestMethod -Headers $Headers -Uri $SubsUri -Method GET

错误信息

Invoke-RestMethod : { "statusCode": 500, "message": "Internal server error", "activityId": "73e5479e-0f8c-4ecd-a26f-055ac17e124c" }
At line:1 char:20
+ ... iResponse = Invoke-RestMethod -Headers $Headers -Uri $SubsUri -Method ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

排查与解决方案

1. 验证令牌类型与权限

  • 核心错误点:代码中直接使用Refresh Token作为Authorization头的令牌,而Partner Center API要求的是Access Token。Refresh Token仅用于获取新的Access Token,无法直接用于API授权。
  • 解决方式:通过Refresh Token换取有效的Access Token,确保令牌的受众(audience)为https://api.partnercenter.microsoft.com,且包含PartnerCenter.Read.All或PartnerCenter.ReadWrite.All权限。

2. 补充必要请求头

部分Partner Center API要求指定客户端标识头,缺少可能引发服务器内部错误。建议补充以下头信息:

"MS-PartnerCenter-Client" = "PowerShell-Custom-Script/1.0" # 自定义客户端标识,格式可自行定义

同时明确API版本,将Accept头修改为:

"Accept" = "application/json; v=1.0"

3. 确认客户ID格式

确保$CustomerId为合作伙伴中心门户中客户的GUID格式租户ID,而非域名或其他别名。API仅接受GUID格式的客户ID,别名无法被正确解析。

4. 排查服务器端异常

记录返回的activityId(73e5479e-0f8c-4ecd-a26f-055ac17e124c),通过微软合作伙伴支持渠道提交工单,该ID可帮助微软工程师定位服务器端的具体故障原因(如客户数据异常、服务临时波动等)。

修正后的示例代码

# 替换为通过Refresh Token获取到的有效Access Token
$accessToken = "YOUR_VALID_ACCESS_TOKEN"
$CustomerId = "CUSTOMER_GUID"

$Headers = @{
    "Authorization" = "Bearer $accessToken"
    "Accept" = "application/json; v=1.0"
    "MS-PartnerCenter-Client" = "PowerShell-Custom-Script/1.0"
}

$SubsUri = "https://api.partnercenter.microsoft.com/v1/customers/$CustomerId/subscriptions"
try {
    $SubsUriResponse = Invoke-RestMethod -Headers $Headers -Uri $SubsUri -Method GET
    $SubsUriResponse
} catch {
    # 捕获更详细的错误响应内容
    $errorStream = $_.Exception.Response.GetResponseStream()
    $reader = New-Object System.IO.StreamReader($errorStream)
    $reader.BaseStream.Position = 0
    $reader.DiscardBufferedData()
    $errorBody = $reader.ReadToEnd()
    Write-Host "详细错误信息: $errorBody"
}

内容的提问来源于stack exchange,提问作者Christoffer Klarskov Jakobsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:42:49