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


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

применимо к: Центр партнеров | Центр партнеров, управляемый 21Vianet | Центр партнеров для Microsoft Cloud для государственных организаций США

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

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

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

Необходимые условия

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

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

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

C#

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

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

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

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

  4. Вызовите метод Create or 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": "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);

пример: тестовое приложение для консоли. Project: примеры Partner Center SDK Class: CreateOrder.cs

Запрос REST

Синтаксис запроса

Метод URI запроса
POST {baseURL}/v1/customers/{customer-id}/orders HTTP/1.1

Параметры URI

Используйте следующий параметр пути для идентификации клиента.

Имя Тип Обязательно Описание
идентификатор клиента струна Да Идентификатор клиента в формате GUID, который идентифицирует клиента.

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

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

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

Заказ

В этой таблице описаны свойства Order в тексте запроса.

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

Элемент заказа

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

Заметка

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

Имя Тип Обязательно Описание
номер позиции int Да Каждый элемент строки в коллекции получает уникальный номер строки, подсчитывая от 0 до count-1.
offerId струна Да Идентификатор предложения. Убедитесь, что предложение доступно для правильного сегмента.
идентификатор подписки струна Нет Идентификатор подписки.
идентификатор родительской подписки струна Нет Необязательный. Идентификатор родительской подписки в предложении на дополнение. Применяется только к PATCH.
дружественное имя струна Нет Необязательный. Партнер присваивает подписке дружественное имя, чтобы помочь разрешить неоднозначность.
количество int Да Количество лицензий для подписки, основанной на лицензиях.
дата окончания пользовательского срока ДатаВремя Нет Дата окончания первого срока выставления счетов новой подписки.
partnerIdOnRecord струна Нет Когда косвенный поставщик размещает заказ от имени косвенного торгового посредника, заполните это поле только идентификатором партнера косвенного торгового посредника (никогда идентификатором косвенного поставщика). Это обеспечивает надлежащий учет стимулов.
контекст предоставления ресурсов Строка<словаря, строка> Нет Сведения, необходимые для обеспечения некоторых позиций в каталоге. Свойство provisioningVariables в номере SKU указывает, какие свойства необходимы для определенных элементов в каталоге.
ссылки OrderLineItemLinks Нет Только для чтения. Ссылки на ресурсы, соответствующие элементу строки заказа.
Атрибуты АтрибутыРесурса Нет Атрибуты метаданных, соответствующие OrderLineItem.
продлениеTo Массив объектов Нет Массив ресурсов RenewsTo.
Аттестация принята bool Нет Указывает согласие с условиями предложения или SKU. Требуется только для предложений или номеров skus, где SkuAttestationProperties или OfferAttestationProperties принудительное применениеAttestation имеет значение True.
ДополнительныеИдентификаторыПартнёровВЗаписи Струна Нет Если косвенный поставщик помещает заказ от имени косвенного торгового посредника, заполните это поле PartnerID только Дополнительного косвенного торгового посредника (никогда не идентификатор косвенного поставщика). Стимулы не применяются для этих дополнительных торговых посредников. Можно ввести только не более 5 косвенных торговых посредников. Это применимо только для партнеров, осуществляющих сделки в странах/регионах ЕС/ЕАСТ.
ПродлениеTo

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

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

В случае успешного выполнения метод возвращает ресурс Order в тексте ответа.

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

Коды успешных и ошибочных ответов

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