计费发票对帐 API v2 (GA)
适用于: 合作伙伴中心(主权云中不可用)
我们的异步 API 提供了一种更快、更易管理的方式,用于通过 Azure Blob 访问计费和对帐数据。 使用此 API 时,无需将连接保持打开数小时,也无需一次循环访问包含 2,000 行项的批。
我们已使用代客密钥和异步请求-回复模式优化了新的商务计费发票对帐 API。 此 API 提供共享访问签名 (SAS) 令牌,可用于访问所有属性或计费发票对帐数据的子集。
注意
新 API 不托管在合作伙伴中心 API 主机上。 相反,可以在 MS Graph 上使用 Microsoft 图形 API 导出合作伙伴计费数据 - Microsoft Graph v1.0。 若要访问此 API,请参阅以下详细信息。
重要
若要向应用授予访问合作伙伴计费数据所需的权限,需要遵循此链接并了解 Microsoft Graph 的身份验证和授权基础知识。
通常,可以使用 Azure 门户 或 Entra 管理中心分配所需的权限:“PartnerBilling.Read.All”。下面是执行此操作的步骤:
- 在“应用注册”部分下的“Microsoft Entra 主页上注册应用。
- 在 API 权限部分下的“Microsoft Entra 应用”页中向应用分配权限。 选择“添加权限”,然后选择“PartnerBilling.Read.All”范围。
API 概述
若要异步检索计费 的新商务 发票对帐数据,请使用两个 API 终结点。 下面介绍了该过程:
计费发票对帐终结点
使用此 API 检索 新的商务 计费发票对帐行项。 API 返回 202 HTTP 状态和包含 URL 的位置标头。 定期轮询此 URL,直到收到清单 URL 的成功状态。
操作状态终结点
若要获取成功状态,请定期调用此 API。 如果数据尚未准备就绪,API 响应将包含“重试后”标头,告知在重试之前等待多长时间。 操作完成后,你将获得包含存储文件夹的清单资源,可在其中下载使用情况数据。 响应将文件分解为较小的部分,以便优化吞吐量和 I/O 并行度。
序列图
下面是一个序列图,其中显示了下载新的商业发票对帐数据的步骤。
用户操作序列
若要检索计费的发票对帐数据,请执行以下步骤:
步骤 1:提交请求
将 POST 请求提交到 API 终结点。
获取计费发票对帐行项
API 请求
POST https://graph.microsoft.com/v1.0/reports/partners/billing/reconciliation/billed/export
Accept: application/json
Content-Type: application/json
{
"invoiceId": "G016907411",
"attributeSet": "basic"
}
Query parameters
空值
请求正文
属性 | 必需 | 类型 | 描述 |
---|---|---|---|
attributeSet | False | 字符串 | 为所有属性选择“full”,或为有限的集选择“basic”。 默认值为“full”。(请参阅本文中的属性列表)。 可选。 |
invoiceId | True | 字符串 | 每个发票的唯一标识符。 必需。 |
请求标头
使用最佳做法中列出的 步骤为 API 请求标头,以使用 Microsoft Graph。
API 响应
HTTP/1.1 202 Accepted
Location: <https://graph.microsoft.com/v1.0/reports/partners/billing/operations/9ab9cb54-d07f-4f52-9ea6-a09d7de52c14>
API 通常以 HTTP 202 状态进行响应。 本文中的标准 API 响应状态中列出了其他可能的状态,具体取决于你的请求。
代码 | 说明 |
---|---|
202 – 已接受 | 你的请求已接受。 若要检查请求的状态,请查询位置标头中提供的 URL。 |
步骤 2:检查请求状态
若要检查请求的状态,请等待状态为“成功”或“失败”的 HTTP 200 响应。如果请求成功,则会在“resourceLocation”属性中获取清单 URL。
获取操作状态
检索请求的状态。
API 请求
GET <https://graph.microsoft.com/v1.0/reports/partners/billing/operations/9ab9cb54-d07f-4f52-9ea6-a09d7de52c14>
请求参数
名称 | 包括 | 必须 | 类型 | 说明 |
---|---|---|---|---|
operationId | 请求 URI | True | 字符串 | 用于检查请求状态的唯一 ID。 必需。 |
请求头文件
使用最佳做法中列出的 步骤为 API 请求标头,以使用 Microsoft Graph。
请求正文
不适用。
响应状态
除了本文中标准 API 响应状态中列出的 标准 HTTP 状态 外,API 还可以返回以下 HTTP 状态:
代码 | 说明 |
---|---|
410 - 消失 | 清单链接在设置时间后过期。 若要再次获取清单链接,请发送一个新请求。 |
响应有效负载
API 响应有效负载包括以下属性:
属性 | 必须 | 描述 |
---|---|---|
id | True | 每个响应的唯一 ID 必需。 |
status | True | 值和操作: 必需。 notstarted:等待“Retry-After”标头中指定的时间,然后进行另一个调用来检查状态。 运行:等待“Retry-After”标头中指定的时间,然后进行另一个调用以检查状态。 成功:数据已准备就绪。 使用 resourceLocation 中指定的 URI 检索清单有效负载。 失败:操作永久失败。 重启它。 |
createdDateTime | True | 发出请求的时间。 必需。 |
lastActionDateTime | True | 上次更改状态的时间。 必需。 |
resourceLocation | False | 清单有效负载的 URI。 可选。 |
error | False | 如果操作失败,则以 JSON 格式提供错误详细信息。 可选。 包括以下属性: 消息:错误的详细说明。 代码:发生的错误类型。 |
资源位置对象
属性 | 描述 |
---|---|
id | 清单的唯一标识符。 |
schemaVersion | 清单架构的版本。 |
dataFormat | 计费数据文件的格式。 compressedJSON:数据格式,其中每个 Blob 都是包含 JSON 行格式数据的压缩文件。 若要从每个 Blob 检索数据,请解压缩它。 |
createdDateTime | 创建清单文件的日期和时间。 |
eTag | 清单数据的版本。 计费信息更改会生成新值。 |
partnerTenantId | 合作伙伴租户的 ID。 |
rootDirectory | 文件的根目录。 |
sasToken | SAS(共享访问签名)令牌,可用于读取目录下的所有文件。 |
partitionType | 根据 partitionValue 属性将数据划分为多个 Blob。 系统拆分超出支持数的分区。 默认情况下,数据根据文件中的行项数进行分区。 不要在代码中设置固定数量的行项或文件大小,因为这些值可能会更改。 |
blobCount | 此合作伙伴租户 ID 的文件总数。 |
blobs | 包含合作伙伴租户 ID 的文件详细信息的“blob”对象的 JSON 数组。 |
blob 对象 | 包含以下详细信息的对象: 名称:Blob 的名称。 partitionValue:包含文件的分区。 大型分区拆分为多个文件,每个文件都包含相同的“partitionValue”。 |
name | blob 的名称。 |
partitionValue | 包含文件的分区。 大型分区拆分为多个文件,每个文件都包含相同的“partitionValue”。 |
API 请求
GET <https://graph.microsoft.com/v1.0/reports/partners/billing/operations/9ab9cb54-d07f-4f52-9ea6-a09d7de52c14>
API 响应
响应建议在数据仍在处理之前等待 10 秒。
HTTP/1.1 200 OK
Retry-After: 10
{
"id": "9ab9cb54-d07f-4f52-9ea6-a09d7de52c14",
"createdDateTime": "2022-06-1T10-01-03.4Z",
"lastActionDateTime": "2022-06-1T10-01-05Z",
"status": "running"
}
API 请求
(上一个请求后的 10 秒...)
GET <https://graph.microsoft.com/v1.0/reports/partners/billing/operations/9ab9cb54-d07f-4f52-9ea6-a09d7de52c14>
API 响应
API 返回“resourceLocation”的“成功”状态和 URI。
HTTP/1.1 200 OK
Content-Type: application/json
{
"@odata.context": "https://graph.microsoft.com/v1.0/\$metadata#reports/partners/billing/operations/\$entity",
"@odata.type": "#microsoft.graph.partners.billing.exportSuccessOperation",
"id": "f2170b13-6a8e-47d6-b481-6988490dc0cb",
"createdDateTime": "2023-12-05T21:17:29Z",
"lastActionDateTime": "2023-12-05T21:18:00.8897902Z",
"status": "succeeded",
"resourceLocation": {
"id": "44e8500b-ab92-490e-8ac3-90500a1d3427",
"createdDateTime": "2023-11-06T19:58:47.513Z",
"schemaVersion": "2",
"dataFormat": "compressedJSON",
"partitionType": "default",
"eTag": "RwDrn7fbiTXy6UULE",
"partnerTenantId": "0e195b37-4574-4539-bc42-0e539b9684c0",
"rootDirectory": "https://adlsreconbuprodeastus201.blob.core.windows.net/path_id",
"sasToken": "{token}",
"blobCount": 1,
"blobs": \[
{
"name": "part-00123-5a93fa5d-749f-48bc-a372-9b021d93c3fa.c000.json.gz",
"partitionValue": "default"
}
\]
}
}
步骤 3:从 Azure Blob 存储下载计费发票对帐数据
从清单有效负载 API 响应的“sasToken”和“rootDirectory”属性获取共享访问签名(SAS)令牌和 Blob 存储位置。 Azure 存储 SDK/tool 下载和解压缩 blob 文件。 它采用 JSONLines 格式。
提示
查看示例 代码 ,将 Azure Blob 文件下载并解压缩到本地数据库。
标准 API 响应状态
可以从 API 的响应中获取这些 HTTP 状态:
代码 | 说明 |
---|---|
400 - 错误请求 | 请求缺失或包含不正确的数据。 检查响应正文以了解错误详细信息。 |
401 - 未授权 | 调用方未进行身份验证,必须在进行第一次调用之前向合作伙伴 API 服务进行身份验证。 |
403 - 已禁止 | 您没有发出请求所需的授权。 |
404 - 未找到 | 请求的资源在提供的输入参数中不可用。 |
410 - 消失 | 清单链接不再有效或处于活动状态。 提交新请求。 |
500 - 内部服务器错误 | API 或其依赖项之一目前无法满足请求。 请稍后重试。 |
5000 – 无可用数据 | 系统没有提供的输入参数的数据。 |
计费发票对帐数据属性
若要比较“完整”或“基本”属性集的计费发票对帐 API 返回的属性,请参阅下表。 若要了解有关这些属性的详细信息,请参阅 “使用对帐文件”。
属性 | 完全 | 基本 |
---|---|---|
PartnerId | 是 | 是 |
CustomerId | 是 | 是 |
CustomerName | 是 | 是 |
CustomerDomainName | 是 | 否 |
CustomerCountry | 是 | 否 |
InvoiceNumber | 是 | 是 |
MpnId | 是 | 否 |
Tier2MpnId | 是 | 是 |
OrderId | 是 | 是 |
OrderDate | 是 | 是 |
ProductId | 是 | 是 |
SkuId | 是 | 是 |
AvailabilityId | 是 | 是 |
SkuName | 是 | 否 |
ProductName | 是 | 是 |
ChargeType | 是 | 是 |
UnitPrice | 是 | 是 |
数量 | 是 | 否 |
小计 | 是 | 是 |
TaxTotal | 是 | 是 |
总计 | 是 | 是 |
货币 | 是 | 是 |
PriceAdjustmentDescription | 是 | 是 |
PublisherName | 是 | 是 |
PublisherId | 是 | 否 |
SubscriptionDescription | 是 | 否 |
SubscriptionId | 是 | 是 |
ChargeStartDate | 是 | 是 |
ChargeEndDate | 是 | 是 |
TermAndBillingCycle | 是 | 是 |
EffectiveUnitPrice | 是 | 是 |
UnitType | 是 | 否 |
AlternateId | 是 | 否 |
BillableQuantity | 是 | 是 |
BillingFrequency | 是 | 否 |
PricingCurrency | 是 | 是 |
PCToBCExchangeRate | 是 | 是 |
PCToBCExchangeRateDate | 是 | 否 |
MeterDescription | 是 | 否 |
ReservationOrderId | 是 | 是 |
CreditReasonCode | 是 | 是 |
SubscriptionStartDate | 是 | 是 |
SubscriptionEndDate | 是 | 是 |
ReferenceId | 是 | 是 |
ProductQualifiers | 是 | 否 |
PromotionId | 是 | 是 |
ProductCategory | 是 | 是 |
代码示例
有关使用 API 的指导,请参阅以下链接,其中包含 C# 中的示例代码。
Partner-Center-Billing-Recon-Samples:用于从合作伙伴中心获取计费对帐数据的 API 示例(github.com)。