使用合作伙伴中心 API 为客户创建订单
适用于:合作伙伴中心|由世纪互联运营的合作伙伴中心|适用于美国政府的 Microsoft 云合作伙伴中心
为 Azure 预留 VM 实例产品创建订单仅适用于:
- 合作伙伴中心
有关当前可供销售的内容的信息,请参阅 云解决方案提供商计划中的合作伙伴产品/服务。
必备条件
合作伙伴中心身份验证中所述的凭据。 此方案支持使用独立应用和 App+用户凭据进行身份验证。
客户 ID (
customer-tenant-id)。 如果不知道客户的 ID,则可以在合作伙伴中心仪表板中查找它。 从“合作伙伴中心”菜单中选择“CSP” ,然后选择“客户” 。 从客户列表中选择客户,然后选择“帐户” 。 在客户的“帐户”页上的“客户帐户信息” 部分查找 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": "fcddfa52-1da8-4529-d347-50ea51e1e7be",
"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", "5198C069-3DAA-403A-8660-5BE11BFD12EE" },
{ "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 标头。
请求正文
订单
下表描述了请求正文中的 Order 属性。
| 属性 | 类型 | 必需 | 说明 |
|---|---|---|---|
| id | 字符串 | 否 | 成功创建订单时提供的订单标识符。 |
| referenceCustomerId | string | 否 | 客户标识符。 |
| billingCycle | 字符串 | 否 | 指示合作伙伴为此订单计费的频率。 支持的值是在 BillingCycleType 中找到的成员名称。 在创建订单时,默认值为“Monthly”或“OneTime”。 成功创建订单时将应用此字段。 |
| lineItems | OrderLineItem 资源的数组 | 是 | 客户正在购买的产品/服务的项化列表,包括数量。 |
| currencyCode | string | 否 | 只读。 下单时使用的货币。 成功创建订单时应用。 |
| creationDate | datetime | 否 | 只读。 订单的创建日期,格式为日期-时间。 成功创建订单时应用。 |
| 状态 | 字符串 | 否 | 只读。 订单的状态。 支持的值是在 OrderStatus 中找到的成员名称。 |
| 链接 | OrderLinks | 否 | 与 Order 对应的资源链接。 |
| attributes | ResourceAttributes | 否 | 对应于 Order 的元数据属性。 |
| PartnerOnRecordAttestationAccepted | 布尔 | 是 | 确认证明完成 |
OrderLineItem
下表描述了请求正文中的 OrderLineItem 属性。
注意
仅当间接提供商代表间接经销商下订单时,才应提供 partnerIdOnRecord。 它用于存储间接经销商的 Microsoft 合作伙伴网络 ID, (从不存储间接提供商的 ID) 。
| 名称 | 类型 | 必需 | 说明 |
|---|---|---|---|
| lineItemNumber | int | 是 | 集合中的每个明细项目都将获得一个唯一的行号,行号的范围为从 0 到 count-1。 |
| offerId | 字符串 | 是 | 套餐标识符。 |
| subscriptionId | string | 否 | 订阅标识符。 |
| parentSubscriptionId | 字符串 | 否 | 可选。 附加产品套餐中的父订阅的 ID。 仅适用于 PATCH。 |
| friendlyName | 字符串 | 否 | 可选。 合作伙伴定义的订阅的友好名称,以帮助消除歧义。 |
| quantity | int | 是 | 基于许可证的订阅的许可证数量。 |
| customTermEndDate | DateTime | 否 | 新订阅的第一个计费期限的结束日期。 |
| partnerIdOnRecord | string | 否 | 当间接提供商代表间接经销商下订单时,使用间接经销商的 MPN ID 填充此字段, (从 不) 间接提供商的 ID。 这可以确保正确地针对奖励进行记账。 |
| provisioningContext | <字典字符串,字符串> | 否 | 为目录中的某些项目预配所需的信息。 SKU 中的 provisioningVariables 属性指示目录中特定项需要哪些属性。 |
| 链接 | OrderLineItemLinks | 否 | 只读。 与“订单”行项对应的资源链接。 |
| attributes | ResourceAttributes | 否 | 对应于 OrderLineItem 的元数据属性。 |
| renewsTo | 对象数组 | 否 | RenewsTo 资源的数组。 |
| 证明Accepted | bool | 否 | 指示产品/服务或 SKU 条件的协议。 仅适用于 SkuAttestationProperties 或 OfferAttestationProperties 强制实施Attestation 的产品/服务或 SKU。 |
| AdditionalPartnerIdsOnRecord | String | 否 | 当间接提供商代表间接经销商下订单时,使用 其他间接经销商 的 MPN ID 填充此字段, (绝不是间接提供商) 的 ID。 奖励不适用于这些额外的经销商。 最多只能输入 5 个间接经销商。 这只是在欧盟/EFTA 国家/地区交易的适用合作伙伴。 |
RenewsTo
下表描述了请求正文中的 RenewsTo 属性。
| 属性 | 类型 | 必需 | 说明 |
|---|---|---|---|
| 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": "3D5ECED6-1151-44C7-AEE6-70A4BB725666",
"scope": "shared",
"duration": "1Year"
},
"OfferId": "DZH318Z0BQ4B:0047:DZH318Z0DSM8",
"FriendlyName": "A_sample_Azure_RI",
"Quantity": 1
}
]
}
REST 响应
如果成功,该方法在响应正文中返回 Order 资源。
如果订单包含一个或多个订阅,则仅在 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: b593cbb7-b358-4b31-81fc-e60b9c277a7f
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"
}
}