Поделиться через


Создание заказа для клиента с помощью API Центра партнеров

Область применения: Центр партнеров | Центр партнеров, управляемый 21Vianet | Центр партнеров для Microsoft Cloud for US Government

Создание заказа для продуктов экземпляра зарезервированной виртуальной машины Azure применяется только к следующим причинам:

  • Центр партнеров

Сведения о том, что в настоящее время доступно для продажи, см. в разделе "Предложения партнеров" в программе поставщик облачных решений.

Необходимые компоненты

  • Учетные данные, описанные в статье о проверке подлинности в Центре партнеров. Этот сценарий поддерживает проверку подлинности с помощью автономных учетных данных приложения и приложения и пользователя.

  • Идентификатор клиента (customer-tenant-id). Если вы не знаете идентификатор клиента, его можно найти в Центре партнеров, выбрав рабочую область "Клиенты" , затем клиент из списка клиентов, а затем учетная запись. На странице "Учетная запись клиента" найдите идентификатор Майкрософт в разделе "Сведения о учетной записи клиента". Идентификатор Майкрософт совпадает с идентификатором клиента (customer-tenant-id).

  • Идентификатор предложения.

C#

Чтобы создать заказ для клиента, выполните приведенные действия.

  1. Создайте экземпляр объекта Order и задайте свойству ReferenceCustomerID идентификатор клиента для записи клиента.

  2. Создайте список объектов OrderLineItem и назначьте список свойству LineItems заказа. В каждой позиции в строке заказа содержатся сведения о покупке для одного предложения. Необходимо наличие по крайней мере одной позиции в строке заказа.

  3. Получите интерфейс для упорядочивания операций. Сначала вызовите метод IAggregatePartner.Customers.ById с идентификатором клиента для идентификации клиента. Затем получите интерфейс из свойства Orders.

  4. Вызовите метод Create или CreateAsync и передайте объект Order.

  5. Чтобы завершить аттестацию и включить дополнительные торговые посредники, ознакомьтесь со следующими примерами запросов и ответов:

Пример запроса

{
    "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)

Используйте приведенный ниже параметр пути, чтобы определить клиента.

Имя. Type Обязательно Описание
customer-id строка Да Идентификатор guid, отформатированный идентификатором клиента, идентифицирующий клиента.

Заголовки запросов

Дополнительные сведения см. в статье о заголовках REST Центра партнеров.

Текст запроса

Порядок

В этой таблице описываются свойства order в тексте запроса.

Свойство Тип Обязательно Описание
id строка Нет Идентификатор заказа, предоставленный при успешном создании заказа.
referenceCustomerId строка Нет Идентификатор клиента.
billingCycle строка Нет Указывает частоту выставления счетов партнером за этот заказ. Поддерживаемые значения: имена участников в BillingCycleType. Значение по умолчанию — "Ежемесячно" или "OneTime" при создании заказа. Это поле применяется при успешном создании заказа.
lineItems массив ресурсов OrderLineItem Да Элементизованный список предложений, которые клиент приобретает, включая количество.
currencyCode строка Нет Только чтение. Валюта, используемая при размещении заказа. Применено к успешному созданию заказа.
creationDate datetime No Только чтение. Дата создания заказа в формате "дата-время". Применено к успешному созданию заказа.
статус строка Нет Только чтение. Состояние заказа. Поддерживаемые значения — это имена элементов, найденные в OrderStatus.
ссылки OrderLinks No Ссылки на ресурсы, соответствующие заказу.
атрибутов ResourceAttributes No Атрибуты метаданных, соответствующие заказу.
PartnerOnRecordAttestationAccepted Логический Да Подтверждение завершения аттестации

OrderLineItem

В этой таблице описываются свойства OrderLineItem в тексте запроса.

Примечание.

ПартнерIdOnRecord должен предоставляться только в том случае, если косвенный поставщик помещает заказ от имени косвенного торгового посредника. Он используется для хранения Идентификатора партнера только косвенного торгового посредника (никогда не идентификатор косвенного поставщика).

Имя. Type Обязательно Описание
lineItemNumber INT Да Для каждой позиции в строке коллекции имеется уникальный номер строки от 0 до "число-1".
offerId строка Да Идентификатор предложения. Убедитесь, что предложение доступно для правильного сегмента.
subscriptionId строка Нет Идентификатор подписки.
parentSubscriptionId строка Нет Необязательно. Идентификатор родительской подписки в дополнительном предложении. Применяется только к PATCH.
friendlyName строка Нет Необязательно. Понятное имя подписки, определенной партнером, чтобы помочь диамбигуировать.
quantity INT Да Количество лицензий для подписки на основе лицензий.
customTermEndDate Дата/время No Дата окончания первого срока выставления счетов новой подписки.
partnerIdOnRecord строка Нет Если косвенный поставщик помещает заказ от имени косвенного торгового посредника, заполните это поле только партнером косвенного торгового посредника (никогда не идентификатор косвенного поставщика). Это гарантирует правильное ведение учета по программам поощрения.
provisioningContext Строка словаря<, строка> No Сведения, необходимые для подготовки некоторых элементов в каталоге. Свойство provisioningVariables в номере SKU указывает, какие свойства необходимы для определенных элементов в каталоге.
ссылки OrderLineItemLinks No Только чтение. Ссылки на ресурсы, соответствующие элементу строки заказа.
атрибутов ResourceAttributes No Атрибуты метаданных, соответствующие OrderLineItem.
продлениеTo Массив объектов No Массив ресурсов RenewsTo .
АттестацияAccepted bool No Указывает соглашение о предложении или условии SKU. Требуется только для предложений или номеров skus, где SkuAttestationProperties или OfferAttestationProperties принудительное применениеAttestation имеет значение True.
AdditionalPartnerIdsOnRecord Строка Нет Если косвенный поставщик помещает заказ от имени косвенного торгового посредника, заполните это поле только PartnerID дополнительного косвенного торгового посредника (никогда не идентификатор косвенного поставщика). Стимулы не применяются для этих дополнительных торговых посредников. Можно ввести только не более 5 косвенных торговых посредников. Это применимо только для партнеров, трансактируемых в странах и регионах ЕС/ EFTA.
ПродлениеTo

В этой таблице описываются свойства RenewsTo в тексте запроса.

Свойство Тип Обязательно Описание
termDuration строка Нет Представление срока продления срока продления в формате 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 в тексте ответа.

Если заказ содержит одну или несколько подписок, соответствующие значения идентификатора подписки будут отображаться только в ответе REST, если соответствующие подписки были подготовлены во время вызова API. Подписки подготовки выполняются асинхронно, поэтому значения идентификатора подписки могут не всегда отображаться в ответе REST вызова Create Order. Однако после подготовки соответствующих подписок их значения идентификатора подписки можно получить через вызовы API получения заказов и получения заказа.

Коды успешного выполнения и ошибок в ответе

Каждый ответ сопровождается кодом состояния 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"
    }
}