计费发票对帐 API v2 (GA)

适用于: 合作伙伴中心(主权云中不可用)

我们的新异步 API 提供了一种更快、更高效的方式来通过 Azure Blob 访问计费和对帐数据。 现在可以简化工作流,而不是将连接保持打开数小时或处理 2,000 行项的批处理。

新的商务计费发票对帐 API 使用辅助密钥异步请求-回复模式等高级技术。 此 API 提供共享访问签名 (SAS) 令牌,可用于访问所有属性或计费发票对帐数据的子集。

我们的 API 使用优化的技术来提高效率,因此你可以以更少的工作量获得更快的结果。 接受此 API 以简化数据访问并提高整体效率。

注意

新 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 提取 新的商务 计费发票对帐行项。 发出请求时,会收到 202 HTTP 状态和带有 URL 的位置标头。 定期轮询此 URL,直到获得成功状态和清单 URL。

操作状态终结点

接下来,通过定期调用此 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 每个响应的唯一标识符
必需。
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 Microsoft合作伙伴租户的 Entra ID。
rootDirectory 文件的根目录。
sasToken SAS(共享访问签名)令牌,可用于读取目录下的所有文件。
partitionType 根据 partitionValue 属性将数据划分为多个 Blob。 系统拆分超出支持数的分区。 默认情况下,数据根据文件中的行项数进行分区。 不要在代码中设置固定数量的行项或文件大小,因为这些值可能会更改。
blobCount 此合作伙伴租户 ID 的文件总数。
blobs 包含合作伙伴租户 ID 的文件详细信息的“blob”对象的 JSON 数组。
blob 对象 包含以下详细信息的对象:
namepartitionValue
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 存储下载计费发票对帐行项

首先,需要获取共享访问签名(SAS)令牌和 Blob 存储位置。 可以在清单有效负载 API 响应的“sasToken”和“rootDirectory”属性中找到这些详细信息。 然后,若要下载并解压缩 blob 文件,请使用 Azure 存储 SDK/tool。 它采用 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)。