为间接经销商的客户创建订单

如何为间接经销商的客户创建订单。

必备条件

  • 合作伙伴中心身份验证中所述的凭据。 此方案只支持使用应用凭据和用户凭据进行身份验证。

  • 客户 ID (customer-tenant-id)。 如果不知道客户的 ID,则可以在合作伙伴中心仪表板中查找它。 从“合作伙伴中心”菜单中选择“CSP” ,然后选择“客户” 。 从客户列表中选择客户,然后选择“帐户” 。 在客户的“帐户”页上的“客户帐户信息” 部分查找 Microsoft ID。 Microsoft ID 与客户 ID (customer-tenant-id) 相同。

  • 要购买的项的产品标识符。

  • 间接经销商的租户标识符。

C#

若要为间接经销商的客户创建订单:

  1. 获取与登录的合作伙伴建立了关系的间接经销商的集合。

  2. 获取集合中与间接经销商 ID 匹配的项的局部变量。 此步骤可帮助你在创建订单时访问经销商的 MpnId 属性。

  3. 实例化 Order 对象并将 ReferenceCustomerID 属性设置为客户标识符,以便记录该客户。

  4. 创建 OrderLineItem 对象的列表,并将该列表分配到订单的 LineItems 属性。 每个订单明细项目都包含一种套餐的购买信息。 请确保在每个行项中的 PartnerIdOnRecord 属性中填充间接经销商的 MPN ID。 必须具有至少一个订单明细项目。

  5. 通过使用客户 ID 调用 IAggregatePartner. ById 方法来标识客户,并从 Orders 属性检索接口,获取用于对操作进行排序的接口。

  6. 调用 createCreateAsync 方法来创建订单。

C# 示例

// IAggregatePartner partnerOperations;
// string customerId;
// string offerId;
// string indirectResellerId;

// Get the indirect resellers with a relationship to the signed-in partner.
var indirectResellers = partnerOperations.Relationships.Get(PartnerRelationshipType.IsIndirectCloudSolutionProviderOf);

// Find the matching reseller in the collection.
var selectedIndirectReseller = (indirectResellers != null && indirectResellers.Items.Any()) ?
    indirectResellers.Items.FirstOrDefault(reseller => reseller.Id.Equals(indirectResellerId, StringComparison.OrdinalIgnoreCase)) :
    null;

// Prepare the order and populate the PartnerIdOnRecord with the reseller's Microsoft Partner Network Id.
var order = new Order()
{
    ReferenceCustomerId = customerId,
    LineItems = new List<OrderLineItem>()
    {
        new OrderLineItem()
        {
            OfferId = offerId,
            FriendlyName = "New offer purchase.",
            Quantity = 5,
            PartnerIdOnRecord = selectedIndirectReseller != null ? selectedIndirectReseller.MpnId : null
        }
    }
};

// Place the order.
var createdOrder = partnerOperations.Customers.ById(customerId).Orders.Create(order);

示例控制台测试应用Project:合作伙伴中心 SDK 示例: PlaceOrderForCustomer

REST 请求

请求语法

方法 请求 URI
POST {baseURL}/v1/customers/{customer-id}/orders HTTP/1。1

URI 参数

请使用以下路径参数来标识客户。

名称 类型 必需 说明
customer-id 字符串 标识客户的 GUID 格式字符串。

请求标头

有关详细信息,请参阅合作伙伴中心 REST 标头

请求正文

订单

下表描述了请求正文中的 顺序 属性。

名称 类型 必需 说明
id 字符串 订单标识符,在成功创建订单时提供。
referenceCustomerId 字符串 客户标识符。
billingCycle 字符串 针对此订单向合作伙伴收费的频率。 默认值为 "每月",并在成功创建订单时应用。 支持的值为 BillingCycleType中的成员名称。 注意:年度计费功能尚不可用。 很快将支持按年计费。
lineItems 对象数组 OrderLineItem资源的数组。
creationDate 字符串 订单的创建日期,格式为日期-时间。 在成功创建订单时应用。
attributes object 包含 "ObjectType": "Order"。

OrderLineItem

下表描述了请求正文中的 OrderLineItem 属性。

名称 类型 必需 说明
lineItemNumber int 集合中的每个明细项目都将获得一个唯一的行号,行号的范围为从 0 到 count-1。
offerId 字符串 套餐标识符。
subscriptionId string 订阅标识符。
parentSubscriptionId 字符串 可选。 附加产品套餐中的父订阅的 ID。 仅适用于 PATCH。
friendlyName 字符串 可选。 合作伙伴定义的用于帮助消除歧义的订阅的友好名称。
quantity int 基于许可证的订阅的许可证数量。
partnerIdOnRecord 字符串 当间接提供程序代表间接经销商下订单时,使用 间接经销商 的 MPN id 填充此字段,仅 (绝不会) 间接提供商的 id。 这可以确保正确地针对奖励进行记账。 未能提供经销商 MPN ID 不会导致订单失败。 但是,不会记录分销商,因此,这种结果激励计算可能不包括销售。
attributes object 包含 "ObjectType": "OrderLineItem"。

请求示例

POST https://api.partnercenter.microsoft.com/v1/customers/c501c3c4-d776-40ef-9ecf-9cefb59442c1/orders HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 02109f46-3ff2-4be4-9f37-b2eb6d58d542
MS-CorrelationId: 85195ae6-3de5-4978-abd4-7be2fbfe4c84
X-Locale: en-US
Content-Type: application/json
Host: api.partnercenter.microsoft.com
Content-Length: 410
Expect: 100-continue

{
    "Id": null,
    "ReferenceCustomerId": "c501c3c4-d776-40ef-9ecf-9cefb59442c1",
    "BillingCycle": "unknown",
    "LineItems": [{
            "LineItemNumber": 0,
            "OfferId": "DB2E705F-B82A-4024-A3D5-D88E12F2DB35",
            "SubscriptionId": null,
            "ParentSubscriptionId": null,
            "FriendlyName": "New offer purchase.",
            "Quantity": 5,
            "PartnerIdOnRecord": "4847383",
            "Attributes": {
                "ObjectType": "OrderLineItem"
            }
        }
    ],
    "CreationDate": null,
    "Attributes": {
        "ObjectType": "Order"
    }
}

REST 响应

如果成功,响应正文将包含填充的 订单 资源。

响应的成功和错误代码

每个响应都带有一个 HTTP 状态代码,用于指示成功或失败以及其他调试信息。 请使用网络跟踪工具来读取此代码、错误类型和其他参数。 有关完整列表,请参阅 合作伙伴中心错误代码

响应示例

HTTP/1.1 201 Created
Content-Length: 831
Content-Type: application/json; charset=utf-8
MS-CorrelationId: 85195ae6-3de5-4978-abd4-7be2fbfe4c84
MS-RequestId: 02109f46-3ff2-4be4-9f37-b2eb6d58d542
MS-CV: Nd3Oum/L5EywtKQK.0
MS-ServerId: 020021921
Date: Mon, 10 Apr 2017 23:02:24 GMT

{
    "id": "3eddcac6-63b2-4c40-b0b6-f47e18301492",
    "referenceCustomerId": "c501c3c4-d776-40ef-9ecf-9cefb59442c1",
    "billingCycle": "monthly",
    "lineItems": [{
            "lineItemNumber": 0,
            "offerId": "DB2E705F-B82A-4024-A3D5-D88E12F2DB35",
            "subscriptionId": "42226ED6-070A-4E0F-B80C-4CDFB3E97AA7",
            "friendlyName": "New offer purchase.",
            "quantity": 5,
            "partnerIdOnRecord": "4847383",
            "links": {
                "subscription": {
                    "uri": "/customers/c501c3c4-d776-40ef-9ecf-9cefb59442c1/subscriptions/42226ED6-070A-4E0F-B80C-4CDFB3E97AA7",
                    "method": "GET",
                    "headers": []
                }
            }
        }
    ],
    "creationDate": "2017-04-10T16:02:25.983-07:00",
    "links": {
        "self": {
            "uri": "/customers/c501c3c4-d776-40ef-9ecf-9cefb59442c1/orders/3eddcac6-63b2-4c40-b0b6-f47e18301492",
            "method": "GET",
            "headers": []
        }
    },
    "attributes": {
        "etag": "eyJpZCI6IjNlZGRjYWM2LTYzYjItNGM0MC1iMGI2LWY0N2UxODMwMTQ5MiIsInZlcnNpb24iOjF9",
        "objectType": "Order"
    }
}