Создание корзины с заказом клиента

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

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

Примечание.

Срок действия корзины истекает через 7 дней после первоначального создания.

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

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

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

C#

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

  1. Создание экземпляра объекта Cart.

  2. Создайте список объектов CartLineItem и назначьте список свойству LineItems корзины. Каждый элемент строки корзины содержит сведения о покупке для одного продукта. У вас должен быть по крайней мере один элемент строки корзины.

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

  4. Вызовите метод Create или CreateAsync, чтобы создать корзину.

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

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


{
    "PartnerOnRecordAttestationAccepted":true,     "lineItems": [
        {
            "id": 0,
            "catalogItemId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
            "quantity": 1,
            "billingCycle": "monthly",
            "termDuration": "P1M",
            "renewsTo": null,
            "provisioningContext": {},
            "customTermEndDate": "2022-02-19T00:00:00Z"
        },
        {
            "id": 1,
            "catalogItemId": "CFQ7TTC0LFLS:0002:CFQ7TTC0KDLJ",
            "quantity": 2,
            "billingCycle": "monthly",
            "termDuration": "P1Y",
            "participants": [
                {
                    "key": "transaction_reseller",
                    "value": "5357564"
                },
                 {
                    "key": "additional_transaction_reseller",                     
                    "value": "517285"
                },
                 {
                    "key": "additional_transaction_reseller", 
                    "value": "5357563"
                }
            ]
        }
    ]
}


Пример ответа


{
    "id": "3e22b548-647d-4223-9675-1fcb6cb57665",
    "creationTimestamp": "2021-08-18T17:29:52.3517492Z",
    "lastModifiedTimestamp": "2021-08-18T17:29:52.3517553Z",
    "expirationTimestamp": "2021-08-25T17:30:11.2406416Z",
    "lastModifiedUser": "da62a0dc-35e9-4601-b48e-a047bd3ec7c1",
    "status": "Active",
    "lineItems": [
        {
            "id": 0,
            "catalogItemId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
            "quantity": 1,
            "currencyCode": "USD",
            "billingCycle": "monthly",
            "termDuration": "P1M",
	    "customTermEndDate": "2022-02-19T00:00:00Z";
            "provisioningContext": {},
            "orderGroup": "0"
        },
        {
            "id": 1,
            "catalogItemId": "CFQ7TTC0LFLS:0002:CFQ7TTC0KDLJ",
            "quantity": 2,
            "currencyCode": "USD",
            "billingCycle": "monthly",
            "termDuration": "P1Y",
            "participants": [
                {
                    "key": "transaction_reseller",
                    "value": "5357564"
                },
                {
                    "key": "additional_transaction_reseller", 
                    "value": "517285"
                },
                {
                    "key": "additional_transaction_reseller", 
                    "value": "5357563"
                }
            ],
            "provisioningContext": {},
            "orderGroup": "0"
        }
    ],
    "links": {
        "self": {
            "uri": "/customers/f81d98dd-c2f4-499e-a194-5619e260344e/carts/3e22b548-647d-4223-9675-1fcb6cb57665",
            "method": "GET",
            "headers": []
        }
    },
    "attributes": {
        "objectType": "Cart"
    }
}


Пример C#

// IAggregatePartner partnerOperations;
// string customerId;
// string subscriptionId;

var cart = new Cart()
{
    LineItems = new List<CartLineItem>()
    {
        new CartLineItem()
        {
      /* Microsoft Azure Subscription */
            Id = 0,
            CatalogItemId = "MS-AZR-0145P",
            Quantity = 1,
            BillingCycle = BillingCycleType.Monthly,
            TermDuration = "P1Y"
        },
        new CartLineItem()
        {
      /* Azure Reserved Instance */
            Id = 1,
            CatalogItemId = "DZH318Z0BQ36:004G:DZH318Z08C0S",
            Quantity = 1,
            BillingCycle = BillingCycleType.OneTime,
            TermDuration = "P1Y",
            ProvisioningContext = new Dictionary<string, string>
            {
                { "subscriptionId", subscriptionId },
                { "scope", "shared" }
            }
        },
        new CartLineItem()
        {
      /* Azure Reserved Instance */
            Id = 2,
            CatalogItemId = "DZH318Z0BQ36:004J:DZH318Z08B8X",
            Quantity = 1,
            BillingCycle = BillingCycleType.OneTime,
            TermDuration = "P3Y",
            ProvisioningContext = new Dictionary<string, string>
            {
                { "subscriptionId", subscriptionId },
                { "scope", "shared" }
            }
        },
        new CartLineItem()
        {
      /* Perpetual Software */
            Id = 3,
            CatalogItemId = "DG7GMGF0DWM3:0002:DG7GMGF0DT1M",
            Quantity = 1,
            BillingCycle = BillingCycleType.OneTime
        },
        new CartLineItem()
        {
      /* SaaS */
            Id = 4,
            CatalogItemId = "DZH318Z0BXWC:0002:DZH318Z0BMRV",
            Quantity = 1,
            BillingCycle = BillingCycleType.Monthly,
            TermDuration = "P1M"
        },
        new CartLineItem()
        {
      /* SaaS Free Trial */
            Id = 5,
            CatalogItemId = "DZH318Z0C0WF:0001:DZH318Z0BP69",
            Quantity = 10,
            BillingCycle = BillingCycleType.None,
            TermDuration = "P1M",
            RenewsTo = new RenewsTo
            {
                TermDuration = "P1Y"
            }
        }
    }
};

cart = partnerOperations.Customers.ById(customerId).Carts.Create(cart);

Java

Пакет SDK для Java центра партнеров можно использовать для управления ресурсами Центра партнеров. Это проект с открытым исходным кодом, поддерживаемый сообществом партнеров и официально не поддерживаемый корпорацией Майкрософт. При необходимости вы можете получить помощь от сообщества или опубликовать проблему в GitHub.

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

  1. Создание экземпляра объекта Cart.

  2. Создайте список объектов CartLineItem и назначьте список элементам строки корзины. Каждый элемент строки корзины содержит сведения о покупке для одного продукта. У вас должен быть по крайней мере один элемент строки корзины.

  3. Получите интерфейс для операций корзины путем вызова функции IAggregatePartner.getCustomers().byId с идентификатором клиента для идентификации клиента, а затем получения интерфейса из функции getCart .

  4. Вызовите функцию create, чтобы создать корзину.

Пример Java

// IAggregatePartner partnerOperations;
// String customerId;
// String subscriptionId;
// String catalogItemId;

CartLineItem lineItem = new CartLineItem();

lineItem.setBillingCycle(BillingCycleType.OneTime);
lineItem.setCatalogItemId(catalogItemId);
lineItem.setFriendlyName("Sample RI Purchase");
lineItem.setQuantity(1);

Map<String, String> provisioningContext = new HashMap<String,String>();

provisioningContext.put("duration", "3Years");
provisioningContext.put("scope", "shared");
provisioningContext.put("subscriptionId", subscriptionId);

lineItem.setProvisioningContext(provisioningContext);

List<CartLineItem> lineItemList = new ArrayList<CartLineItem>();
lineItemList.add(lineItem);

Cart cart = new Cart();
cart.setLineItems(lineItemList);

Cart cartCreated = partnerOperations.getCustomers().byId(customerId).getCarts().create(cart);

PowerShell

Модуль PowerShell Центра партнеров можно использовать для управления ресурсами Центра партнеров. Это проект с открытым исходным кодом, поддерживаемый сообществом партнеров и официально не поддерживаемый корпорацией Майкрософт. При необходимости вы можете получить помощь от сообщества или опубликовать проблему в GitHub.

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

  1. Создание экземпляра объекта Cart.

  2. Создайте список объектов CartLineItem и назначьте список элементам строки корзины. Каждый элемент строки корзины содержит сведения о покупке для одного продукта. У вас должен быть по крайней мере один элемент строки корзины.

  3. Выполните команду New-PartnerCustomerCart, чтобы создать корзину.

# $customerId
# $subscriptionId
# $catalogItemId

$lineItem = New-Object -TypeName Microsoft.Store.PartnerCenter.PowerShell.Models.Carts.PSCartLineItem

$lineItem.BillingCycle = 'OneTime'
$lineItem.CatalogItemId = $catalogItemId
$lineItem.FriendlyName = 'Sample RI Purchase'
$lineItem.ProvisioningContext.Add('duration', '1Year')
$lineItem.ProvisioningContext.Add('scope', 'shared')
$lineItem.ProvisioningContext.Add('subscriptionId', $subsciptionId)
$lineItem.Quantity = 10

New-PartnerCustomerCart -CustomerId $customerId -LineItems $lineItem

Запрос REST

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

Способ URI запроса
POST {baseURL}/v1/customers/{customer-id}/carts HTTP/1.1

Параметр универсального кода ресурса

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

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

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

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

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

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

Свойство Тип Обязательно Описание
id строка Нет Идентификатор корзины, предоставленный при успешном создании корзины.
creationTimeStamp Дата/время No Дата создания корзины в формате даты и времени. Применено к успешному созданию корзины.
lastModifiedTimeStamp Дата/время No Дата последнего обновления корзины в формате даты и времени. Применено к успешному созданию корзины.
dateTimeStamp Дата/время No Срок действия корзины истекает в формате даты и времени. Применено к успешному созданию корзины.
lastModifiedUser строка Нет Пользователь, который последний раз обновил корзину. Применено к успешному созданию корзины.
lineItems Массив объектов Да Массив ресурсов CartLineItem .
PartnerOnRecordAttestationAccepted Логический Да Подтверждение завершения аттестации

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

Свойство Тип Обязательно Описание
id строка Нет Уникальный идентификатор для элемента строки корзины. Применено к успешному созданию корзины.
catalogId строка Да Идентификатор элемента каталога. Убедитесь, что доступность элемента каталога соответствует правильному сегменту.
friendlyName строка Нет Необязательно. Понятное имя элемента, определенного партнером, чтобы помочь диамбигуат.
promotionId строка Нет Необязательно. Большинство рекламных акций NCE автоматически применяются, однако для необязательных рекламных акций (например, Bridge to the Cloud 2) для применения к элементу строки корзины партнеры должны включить идентификатор повышения в запрос на корзину.
quantity INT Да Количество лицензий или экземпляров.
currencyCode строка Нет Код валюты.
billingCycle Object Да Тип период выставления счетов задан для текущего периода.
customTermEndDate Дата/время No Дата окончания существующей подписки, к которой требуется сотерминировать новую подписку.
participants Список пар строк объекта No Коллекция PartnerId on Record (PartnerID) для покупки.
provisioningContext Строка словаря<, строка> No Сведения, необходимые для подготовки некоторых элементов в каталоге. Свойство provisioningVariables в номере SKU указывает, какие свойства необходимы для определенных элементов в каталоге.
orderGroup строка Нет Группа, указывающая, какие элементы можно разместить вместе.
error Object No Применяется после создания корзины, если возникает ошибка.
продлениеTo Массив объектов No Массив ресурсов RenewsTo .
АттестацияAccepted Логический No Указывает соглашение о предложении или условии SKU. Требуется только для предложений или номеров skus, где SkuAttestationProperties или OfferAttestationProperties принудительное применениеAttestation имеет значение True.
transaction_reseller Строка Нет Если косвенный поставщик помещает заказ от имени косвенного торгового посредника, заполните это поле только партнером косвенного торгового посредника (никогда не идентификатор косвенного поставщика). Это гарантирует правильное ведение учета по программам поощрения.
additional_transaction_reseller Строка Нет Если косвенный поставщик помещает заказ от имени косвенного торгового посредника, заполните это поле только PartnerID дополнительного косвенного торгового посредника (никогда не идентификатор косвенного поставщика). Стимулы не применяются для этих дополнительных торговых посредников. Можно ввести только не более 5 косвенных торговых посредников. Это применимо только для партнеров, трансактируемых в странах и регионах ЕС/ EFTA.

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

Свойство Тип Обязательно Описание
termDuration строка Нет Представление срока продления срока продления в формате ISO 8601. Текущие поддерживаемые значения: P1M (1 месяц) и P1Y (1 год).

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

POST /v1/customers/d6bf25b7-e0a8-4f2d-a31b-97b55cfc774d/carts HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 4fa6dad6-a89f-4875-8247-8294a10ae1cf
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
X-Locale: en-US
MS-PartnerCenter-Client: Partner Center .NET SDK
Content-Type: application/json
Host: api.partnercenter.microsoft.com
Content-Length: 496
Expect: 100-continue

{
  "lineItems": [
    {
    /* Microsoft Azure Subscription */
      "id": 0,
      "catalogItemId": "MS-AZR-0145P",
      "quantity": 1,
      "billingCycle": "monthly",
      "termDuration": "P1Y"
    },
    {
    /* Azure Reserved Instance */
      "id": 1,
      "catalogItemId": "DZH318Z0BQ36:004G:DZH318Z08C0S",
      "quantity": 1,
      "billingCycle": "one_time",
      "termDuration": "P1Y",
      "provisioningContext": {
        "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
        "scope": "shared"
      }
    },
    {
    /* Azure Reserved Instance */
      "id": 2,
      "catalogItemId": "DZH318Z0BQ36:004J:DZH318Z08B8X",
      "quantity": 1,
      "billingCycle": "one_time",
      "termDuration": "P3Y",
      "provisioningContext": {
        "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
        "scope": "single"
      }
    },
    {
    /* Perpetual Software */
      "id": 3,
      "catalogItemId": "DG7GMGF0DWTL:0001:DG7GMGF0DSFM",
      "quantity": 1,
      "billingCycle": "one_time"
    },
    {
    /* SaaS */
      "id": 4,
      "catalogItemId": "DZH318Z0BXWC:0002:DZH318Z0BMRV",
      "quantity": 1,
      "billingCycle": "monthly",
      "termDuration": "P1M"
    },
  {
    /* SaaS Free Trial */
       "id": 5,
       "catalogItemId": "DZH318Z0C0WF:0001:DZH318Z0BP69",
       "quantity": 10,
       "billingCycle": "none",
       "termDuration": "P1M",
       "renewsTo": {
         "termDuration": "P1Y"
       }
    }
  ]
}

Внимание

По состоянию на июнь 2023 г. последняя версия пакета SDK для .NET для Центра партнеров 3.4.0 теперь архивируется. Вы можете скачать выпуск пакета SDK из GitHub вместе с файлом чтения, содержащим полезные сведения.

Партнерам рекомендуется продолжать использовать REST API Центра партнеров.

Ответ REST

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

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

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

Пример ответа

HTTP/1.1 201 Created
Content-Length: 764
Content-Type: application/json; charset=utf-8
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
MS-RequestId: 4fa6dad6-a89f-4875-8247-8294a10ae1cf
X-Locale: en-US,en-US
MS-CV: sF/wRa2ih0CzbABc.0
MS-ServerId: 000001
Date: Thu, 15 Mar 2018 17:15:01 GMT
{
  "id": "3655b1a0-b1c9-4268-9824-577fdbc4d0be",
  "creationTimestamp": "2019-01-16T00:45:41.6062996Z",
  "lastModifiedTimestamp": "2019-01-16T00:45:41.6062996Z",
  "expirationTimestamp": "2019-01-16T01:00:54.4188497Z",
  "lastModifiedUser": "1824b7fc-2fac-4478-b177-66823c40ab75",
  "status": "Active",
  "lineItems": [
    {
      "id": 0,
      "catalogItemId": "MS-AZR-0145P",
      "quantity": 1,
      "currencyCode": "USD",
      "billingCycle": "monthly",
      "termDuration": "P1Y",
      "orderGroup": "OMS-0"
    },
    {
      "id": 1,
      "catalogItemId": "DZH318Z0BQ36:004G:DZH318Z08C0S",
      "quantity": 1,
      "currencyCode": "USD",
      "billingCycle": "one_time",
      "termDuration": "P1Y",
      "provisioningContext": {
        "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
        "scope": "shared"
      },
      "orderGroup": "0"
    },
    {
      "id": 2,
      "catalogItemId": "DZH318Z0BQ36:004J:DZH318Z08B8X",
      "quantity": 1,
      "currencyCode": "USD",
      "billingCycle": "one_time",
      "termDuration": "P3Y",
      "provisioningContext": {
        "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
        "scope": "shared"
      },
      "orderGroup": "0"
    },
    {
      "id": 3,
      "catalogItemId": "DG7GMGF0DWM3:0002:DG7GMGF0DT1M",
      "quantity": 1,
      "currencyCode": "USD",
      "billingCycle": "one_time",
      "orderGroup": "0"
    },
    {
      "id": 4,
      "catalogItemId": "DZH318Z0BXWC:0002:DZH318Z0BMRV",
      "quantity": 1,
      "currencyCode": "USD",
      "billingCycle": "monthly",
      "termDuration": "P1M",
      "orderGroup": "1"
    },
  {
      "id": 5,
      "catalogItemId": "DZH318Z0C0WF:0001:DZH318Z0BP69",
      "quantity": 10,
      "currencyCode": "USD",
      "billingCycle": "none",
      "termDuration": "P1M",
      "renewsTo": {
  "termDuration": "P1Y"
      },
    "orderGroup": "2"
    }
  ],
  "links": {
    "self": {
      "uri": "/customers/28045616-f6b9-462f-9701-0d89b5e65c44/carts/3655b1a0-b1c9-4268-9824-577fdbc4d0be",
      "method": "GET",
      "headers": []
    }
  },
  "attributes": {
    "objectType": "Cart"
  }
}

Пример для новых служб на основе лицензий на коммерческой основе

Примечание.

Новые возможности коммерческой торговли для служб на основе лицензий включают множество новых возможностей и доступны для всех поставщик облачных решений (ПОСТАВЩИКОВ УСЛУГ). Дополнительные сведения см . в обзоре новых коммерческих возможностей.

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

POST /v1/customers/932c4101-dc08-461b-b4c1-75d80e905775/carts HTTP/1.1
Host: api.partnercenter.microsoft.com
Content-Type: application/json
Content-Length: 165

{
	"LineItems": [
		{
			"CatalogItemId":"CFQ7TTC0LFLZ:0002:CFQ7TTC0K4TS",
			"Quantity": 1,
			"TermDuration": "P1M",
			"BillingCycle": "Monthly"
		}
	]
}

Внимание

Элементы плана Azure и постоянного программного обеспечения не поддерживают свойство termDuration. Избегайте включения этого при акуирации этих типов элементов.

Ответ REST

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

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

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

Пример ответа


{
    "id": "2517c51b-58cd-4abe-87ed-3ab812401ab4",
    "creationTimestamp": "2023-07-11T21:16:11.55149Z",
    "lastModifiedTimestamp": "2023-07-11T21:16:11.5515713Z",
    "expirationTimestamp": "2023-07-18T21:16:17.2480482Z",
    "lastModifiedUser": "9db12087-fbc3-481c-8965-73d44ff88e27",
    "status": "Active",
    "lineItems": [
        {
            "id": 0,
            "catalogItemId": "CFQ7TTC0LF8S:0001:CFQ7TTC0VZW5",
            "quantity": 1,
            "currencyCode": "USD",
            "billingCycle": "monthly",
            "termDuration": "P1Y",
            "provisioningContext": {},
            "orderGroup": "0",
            "pricing": {
                "listPrice": 30.4,
                "discountedPrice": 30.4,
                "proratedPrice": 30.4,
                "price": 30.4,
                "extendedPrice": 364.8
            }
        }
    ],
    "links": {
        "self": {
            "uri": "/customers/ebd8b4c2-4069-46a8-bd70-123d6dec3e39/carts/2517c51b-58cd-4abe-87ed-3ab812401ab4",
            "method": "GET",
            "headers": []
        }
    },
    "attributes": {
        "objectType": "Cart"
    }
}