计费发票对帐 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)。