使用合作伙伴中心 API 为客户创建订单
适用于:合作伙伴中心 | 由世纪互联运营的合作伙伴中心 | Microsoft Cloud for US Government 合作伙伴中心
为 Azure 虚拟机预留实例产品创建订单仅适用于:
- 合作伙伴中心
有关当前可供销售的内容的信息,请参阅云解决方案提供商计划中的合作伙伴产品/服务。
先决条件
合作伙伴中心身份验证中所述的凭据。 此方案支持使用独立应用和 App+User 凭据进行身份验证。
客户 ID (
customer-tenant-id
)。 如果不知道客户的 ID,可以通过选择“客户”工作区,然后从客户列表中选择客户,然后选择“帐户”,在合作伙伴中心中查找该 ID。 在客户的“帐户”页上,在“客户帐户信息”部分查找Microsoft ID。 Microsoft ID 与客户 ID (customer-tenant-id
) 相同。产品/服务标识符。
C#
为客户创建订单:
实例化 Order 对象,并将 ReferenceCustomerID 属性设置为客户 ID 以记录客户。
创建 OrderLineItem 对象列表,并将该列表分配给订单的 LineItems 属性。 每个订单明细项目都包含一种套餐的购买信息。 必须具有至少一个订单明细项目。
获取用于对操作进行排序的接口。 首先,使用客户 ID 调用 IAggregatePartner.Customers.ById 方法以标识客户。 接下来,从 Orders 属性检索接口。
调用 Create 或 CreateAsync 方法并传入 Order 对象。
若要完成证明并包括其他经销商,请参阅以下示例请求和响应示例:
请求示例
{
"PartnerOnRecordAttestationAccepted":true,
"lineItems": [
{
"offerId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
"quantity": 1,
"lineItemNumber": 0,
"PartnerIdOnRecord": "873452",
"AdditionalPartnerIdsOnRecord":["4847383","873452"]
}
],
"billingCycle": "monthly"
}
响应示例
{
"id": "5cf72f146967",
"alternateId": "5cf72f146967",
"referenceCustomerId": "f81d98dd-c2f4-499e-a194-5619e260344e",
"billingCycle": "monthly",
"currencyCode": "USD",
"currencySymbol": "$",
"lineItems": [
{
"lineItemNumber": 0,
"offerId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"termDuration": "P1M",
"transactionType": "New",
"friendlyName": "AI Builder Capacity add-on",
"quantity": 1,
"partnerIdOnRecord": "873452",
"additionalPartnerIdsOnRecord": [
"4847383",
"873452"
],
"links": {
"product": {
"uri": "/products/CFQ7TTC0LH0Z?country=US",
"method": "GET",
"headers": []
},
"sku": {
"uri": "/products/CFQ7TTC0LH0Z/skus/0001?country=US",
"method": "GET",
"headers": []
},
"availability": {
"uri": "/products/CFQ7TTC0LH0Z/skus/0001/availabilities/CFQ7TTC0K18P?country=US",
"method": "GET",
"headers": []
}
}
}
],
"creationDate": "2021-08-17T18:13:11.3122226Z",
"status": "pending",
"transactionType": "UserPurchase",
"links": {
"self": {
"uri": "/customers/f81d98dd-c2f4-499e-a194-5619e260344e/orders/5cf72f146967",
"method": "GET",
"headers": []
},
"provisioningStatus": {
"uri": "/customers/f81d98dd-c2f4-499e-a194-5619e260344e/orders/5cf72f146967/provisioningstatus",
"method": "GET",
"headers": []
},
"patchOperation": {
"uri": "/customers/f81d98dd-c2f4-499e-a194-5619e260344e/orders/5cf72f146967",
"method": "PATCH",
"headers": []
}
},
"client": {},
"attributes": {
"objectType": "Order"
}
}
IAggregatePartner partnerOperations;
string customerId;
string offerId;
var order = new Order()
{
ReferenceCustomerId = customerId,
LineItems = new List<OrderLineItem>()
{
new OrderLineItem()
{
OfferId = offerId,
FriendlyName = "new offer purchase",
Quantity = 1,
ProvisioningContext = new Dictionary<string, string>
{
{ "subscriptionId", "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f" },
{ "scope", "shared" },
{ "duration", "3Years" }
}
}
}
};
var createdOrder = partnerOperations.Customers.ById(customerId).Orders.Create(order);
示例: 控制台测试应用。 项目:合作伙伴中心 SDK 示例 类:CreateOrder.cs
REST 请求
请求语法
方法 | 请求 URI |
---|---|
POST | {baseURL}/v1/customers/{customer-id}/orders HTTP/1.1 |
URI 参数
请使用以下路径参数来标识客户。
名称 | 类型 | 必需 | 说明 |
---|---|---|---|
customer-id | string | 是 | 标识客户的 GUID 格式的客户 ID。 |
请求标头
有关详细信息,请参阅合作伙伴中心 REST 标头。
请求正文
下单(O)
下表描述了 请求正文中的 Order 属性。
properties | 类型 | 必需 | 描述 |
---|---|---|---|
id | string | 否 | 成功创建订单时提供的订单标识符。 |
referenceCustomerId | string | 否 | 客户标识符。 |
billingCycle | string | 否 | 指示合作伙伴为此订单计费的频率。 支持的值是在 BillingCycleType 中找到的成员名称。 在创建订单时,默认值为“Monthly”或“OneTime”。 成功创建订单时,将应用此字段。 |
lineItems | OrderLineItem 资源的数组 | 是 | 客户正在购买的产品/服务的项化列表,包括数量。 |
currencyCode | string | 否 | 只读。 下订单时使用的货币。 成功创建订单时应用。 |
creationDate | datetime | 否 | 只读。 订单的创建日期,格式为日期-时间。 成功创建订单时应用。 |
状态 | string | 否 | 只读。 订单的状态。 支持的值是在 OrderStatus 中找到的成员名称。 |
链路 | OrderLinks | 否 | 与 Order 对应的资源链接。 |
attributes | ResourceAttributes | 否 | 对应于 Order 的元数据属性。 |
PartnerOnRecordAttestationAccepted | 布尔 | 是 | 确认证明完成 |
OrderLineItem
下表描述了 请求正文中的 OrderLineItem 属性。
注意
仅当间接提供商代表间接经销商下订单时,才应提供 partnerIdOnRecord。 它仅用于存储间接经销商的 PartnerID(从不存储间接提供商的 ID)。
名称 | 类型 | 必需 | 说明 |
---|---|---|---|
lineItemNumber | int | 是 | 集合中的每个明细项目都将获得一个唯一的行号,行号的范围为从 0 到 count-1。 |
offerId | string | 是 | 套餐标识符。 确保产品/服务的可用性适用于正确的细分市场。 |
subscriptionId | string | 否 | 订阅标识符。 |
parentSubscriptionId | string | 否 | 可选。 附加产品套餐中的父订阅的 ID。 仅适用于 PATCH。 |
friendlyName | string | 否 | 可选。 合作伙伴定义的订阅的友好名称,以帮助消除歧义。 |
quantity | int | 是 | 基于许可证的订阅的许可证数量。 |
customTermEndDate | 日期时间 | 否 | 新订阅的第一个计费期限的结束日期。 |
partnerIdOnRecord | string | 否 | 当间接提供商代表间接经销商下订单时,仅使用间接经销商的 PartnerID 填充此字段(从不为间接提供商的 ID)。 这可以确保正确地针对奖励进行记账。 |
provisioningContext | 字典<字符串,字符串> | 否 | 为目录中的某些项目预配所需的信息。 SKU 中的 provisioningVariables 属性指示目录中特定项需要哪些属性。 |
链路 | OrderLineItemLinks | 否 | 只读。 与“订单”行项对应的资源链接。 |
attributes | ResourceAttributes | 否 | 对应于 OrderLineItem 的元数据属性。 |
renewsTo | 对象数组 | 否 | RenewsTo 资源的数组。 |
AttestationAccepted | 布尔 | 否 | 指示提供或 SKU 条件的协议。 仅适用于 SkuAttestationProperties 或 OfferAttestationProperties 强制实施Attestation 的套餐或 SKU。 |
AdditionalPartnerIdsOnRecord | 字符串 | 否 | 当间接提供商代表间接经销商下订单时,仅使用附加间接经销商的 PartnerID 填充此字段(从不为间接提供商的 ID)。 奖励不适用于这些额外的经销商。 最多只能输入 5 个间接经销商。 这只是欧盟/EFTA 国家/地区内交易的适用合作伙伴。 |
RenewsTo
下表描述了 请求正文中的 RenewsTo 属性。
properties | 类型 | 必需 | 说明 |
---|---|---|---|
termDuration | string | 否 | 续订期限持续时间的 ISO 8601 表示形式。 当前支持的值是 P1M (1 个月)和 P1Y (1 年)。 |
请求示例
POST https://api.partnercenter.microsoft.com/v1/customers/b0d70a69-4c42-4b27-b17b-91a835d8686a/orders HTTP/1.1
Authorization: Bearer <token>
Host: api.partnercenter.microsoft.com
Content-Length: 691
Content-Type: application/json
{
"BillingCycle": "one_time",
"CurrencyCode": "USD",
"LineItems": [
{
"LineItemNumber": 0,
"ProvisioningContext": {
"subscriptionId": "cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
"scope": "shared",
"duration": "1Year"
},
"OfferId": "DZH318Z0BQ4B:0047:DZH318Z0DSM8",
"FriendlyName": "A_sample_Azure_RI",
"Quantity": 1
}
]
}
REST 响应
如果订单包含一个或多个订阅,则仅在 API 调用时预配相应的订阅时,相应的订阅 ID 值才会显示在 REST 响应中。 预配订阅以异步方式发生,因此,创建订单调用的 REST 响应中可能不会始终显示订阅 ID 值。 但是,预配相应的订阅后,可以通过“获取订单”和“按 ID API 调用获取订单”来访问其订阅 ID 值。
响应的成功和错误代码
每个响应都带有一个 HTTP 状态代码,用于指示成功或失败以及其他调试信息。 请使用网络跟踪工具来读取此代码、错误类型和其他参数。 有关完整列表,请参阅 合作伙伴中心错误代码。
响应示例
HTTP/1.1 201 Created
Content-Length: 788
Content-Type: application/json; charset=utf-8
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
MS-RequestId: 025f4c19-217f-49d6-a056-391902c62fb3
Date: Thu, 15 Mar 2018 22:30:02 GMT
{
"id": "Cs_jyTxubLpvdJXdo8xcQZN6I2RsLrgZ1",
"referenceCustomerId": "b0d70a69-4c42-4b27-b17b-91a835d8686a",
"billingCycle": "one_time",
"currencyCode": "USD",
"lineItems": [
{
"lineItemNumber": 0,
"offerId": "84A03D81-6B37-4D66-8D4A-FAEA24541538",
"friendlyName": "A_sample_Azure_RI",
"quantity": 1,
"links": {
"sku": {
"uri": "/products/DZH318Z0BQ4B/skus/0047?country=US",
"method": "GET",
"headers": []
}
}
} ],
"creationDate": "2018-03-15T22:30:02.085152Z",
"status": "pending",
"links": {
"provisioningStatus": {
"uri": "/customers/b0d70a69-4c42-4b27-b17b-91a835d8686a/orders/Cs_jyTxubLpvdJXdo8xcQZN6I2RsLrgZ1/provisioningstatus",
"method": "GET",
"headers": []
},
"self": {
"uri": "/customers/b0d70a69-4c42-4b27-b17b-91a835d8686a/orders/Cs_jyTxubLpvdJXdo8xcQZN6I2RsLrgZ1",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Order"
}
}