Приобретение надстройки для подписки
Область применения: Центр партнеров | Центр партнеров, управляемый 21Vianet | Центр партнеров для Microsoft Cloud for US Government
Как приобрести надстройку для существующей подписки.
Предварительные условия
Учетные данные, описанные в статье о проверке подлинности в Центре партнеров. Этот сценарий поддерживает проверку подлинности с использованием учетных данных автономного приложения и приложения и пользователя.
Идентификатор клиента (
customer-tenant-id
). Если вы не знаете идентификатор клиента, вы можете найти его в Центре партнеров , выбрав рабочую область Клиенты , а затем клиента в списке клиентов, а затем — Учетная запись. На странице учетной записи клиента найдите Идентификатор Майкрософт в разделе Сведения об учетной записи клиента. Идентификатор Майкрософт совпадает с идентификатором клиента (customer-tenant-id
).Идентификатор подписки. Это существующая подписка, для которой требуется приобрести предложение надстройки.
Идентификатор предложения, который идентифицирует предложение надстройки для покупки.
Приобретение надстройки с помощью кода
При покупке надстройки в подписку вы обновляете исходный заказ на подписку с заказом на надстройку. В следующем примере customerId — это идентификатор клиента, subscriptionId — идентификатор подписки, а addOnOfferId — идентификатор предложения для надстройки.
Ниже приведены шаги.
Получите интерфейс для операций для подписки.
var subscriptionOperations = partnerOperations.Customers.ById(customerId).Subscriptions.ById(subscriptionId);
Используйте этот интерфейс для создания экземпляра объекта подписки. Это позволит получить сведения о родительской подписке, включая идентификатор заказа.
var parentSubscription = subscriptionOperations.Get();
Создайте экземпляр нового объекта Order . Этот экземпляр заказа используется для обновления исходного заказа, используемого для приобретения подписки. Добавьте однострочный элемент в заказ, представляющий надстройку.
var orderToUpdate = new Order() { ReferenceCustomerId = customerId, LineItems = new List<OrderLineItem>() { new OrderLineItem() { LineItemNumber = 0, OfferId = addOnOfferId, FriendlyName = "Some friendly name", Quantity = 2, ParentSubscriptionId = subscriptionId } } };
Обновите исходный заказ для подписки новым заказом для надстройки.
Order updatedOrder = partnerOperations.Customers.ById(customerId).Orders.ById(parentSubscription.OrderId).Patch(orderToUpdate);
C#
Чтобы приобрести надстройку, начните с получения интерфейса для операций с подпиской, вызвав метод IAggregatePartner.Customers.ById с идентификатором клиента, чтобы идентифицировать клиента, и метод Subscriptions.ById , чтобы определить подписку с предложением надстройки. Используйте этот интерфейс для получения сведений о подписке путем вызова Get. Сведения о подписке содержат идентификатор заказа на подписку, который является заказом, который необходимо обновить с помощью надстройки.
Затем создайте экземпляр нового объекта Order и заполните его одним экземпляром LineItem , который содержит сведения для идентификации надстройки, как показано в следующем фрагменте кода. Этот новый объект будет использоваться для обновления заказа подписки с помощью надстройки. Наконец, вызовите метод Patch , чтобы обновить заказ на подписку, после первого идентификации клиента с помощью IAggregatePartner.Customers.ById и заказа с помощью Orders.ById.
// IAggregatePartner partnerOperations;
// string customerId;
// string subscriptionId;
// string addOnOfferId;
// Get an interface to the operations for the subscription.
var subscriptionOperations = partnerOperations.Customers.ById(customerId).Subscriptions.ById(subscriptionId);
// Get the parent subscription details.
var parentSubscription = subscriptionOperations.Get();
// In order to buy an add-on subscription for this offer, we need to patch/update the order through which the base offer was purchased
// by creating an order object with a single line item which represents the add-on offer purchase.
var orderToUpdate = new Order()
{
ReferenceCustomerId = customerId,
LineItems = new List<OrderLineItem>()
{
new OrderLineItem()
{
LineItemNumber = 0,
OfferId = addOnOfferId,
FriendlyName = "Some friendly name",
Quantity = 2,
ParentSubscriptionId = subscriptionId
}
}
};
// Update the order to apply the add on purchase.
Order updatedOrder = partnerOperations.Customers.ById(customerId).Orders.ById(parentSubscription.OrderId).Patch(orderToUpdate);
Пример: тестовое консольное приложение. Project: Partner Center SDK Samples Class: AddSubscriptionAddOn.cs
Запрос REST
Синтаксис запроса
Метод | Универсальный код ресурса (URI) запроса |
---|---|
PATCH | {baseURL}/v1/customers/{customer-tenant-id}/orders/{order-id} HTTP/1.1 |
Параметры универсального кода ресурса (URI)
Используйте следующие параметры для идентификации клиента и заказа.
Имя | Тип | Обязательно | Описание |
---|---|---|---|
customer-tenant-id | guid | Да | Значение представляет собой идентификатор GUID в формате customer-tenant-id , который идентифицирует клиента. |
order-id | guid | Да | Идентификатор заказа. |
Заголовки запроса
Дополнительные сведения см. в статье о заголовках REST Центра партнеров.
Тело запроса
В следующих таблицах описаны свойства в тексте запроса.
Заказ
Имя | Тип | Обязательно | Описание |
---|---|---|---|
Идентификатор | строка | N | Идентификатор заказа. |
ReferenceCustomerId | строка | Да | Идентификатор клиента. |
LineItems | массив объектов | Да | Массив объектов OrderLineItem . |
CreationDate | строка | N | Дата создания заказа в формате "дата-время". |
Атрибуты | object | Нет | Содержит "ObjectType": "Order". |
OrderLineItem
Имя | Тип | Обязательно | Описание |
---|---|---|---|
LineItemNumber | number | Да | Номер позиции, начинающийся с 0. |
OfferId | строка | Да | Идентификатор предложения надстройки. |
SubscriptionId | строка | N | Идентификатор приобретенной подписки надстройки. |
ParentSubscriptionId | строка | Да | Идентификатор родительской подписки с предложением надстройки. |
FriendlyName | строка | Нет | Понятное имя для этого элемента строки. |
Количество | number | Да | Количество лицензий. |
PartnerIdOnRecord | строка | Нет | PartnerID партнера записи. |
Атрибуты | object | Нет | Содержит "ObjectType": "OrderLineItem". |
Пример запроса
PATCH https://api.partnercenter.microsoft.com/v1/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/orders/CF3B0E37-BE0B-4CDD-B584-D1A97D98A922 HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 17a2658e-d2cc-439b-a2f0-2aefd9344fbc
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
X-Locale: en-US
Content-Type: application/json
Host: api.partnercenter.microsoft.com
Content-Length: 414
Expect: 100-continue
{
"Id": null,
"ReferenceCustomerId": "4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04",
"LineItems": [{
"LineItemNumber": 0,
"OfferId": "2828BE95-46BA-4F91-B2FD-0BEF192ECF60",
"SubscriptionId": null,
"ParentSubscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"FriendlyName": "Some friendly name",
"Quantity": 2,
"PartnerIdOnRecord": null,
"Attributes": {
"ObjectType": "OrderLineItem"
}
}
],
"CreationDate": null,
"Attributes": {
"ObjectType": "Order"
}
}
Ответ REST
В случае успешного выполнения этот метод возвращает обновленный порядок подписки в тексте ответа.
Коды успешного выполнения и ошибок в ответе
Каждый ответ сопровождается кодом состояния HTTP, обозначающим успешное или неудачное выполнение, и дополнительными сведениями для отладки. Используйте средство трассировки сети, чтобы просматривать этот код, тип ошибки и дополнительные параметры. Полный список см. в разделе Коды ошибок Центра партнеров.
Пример ответа
HTTP/1.1 200 OK
Content-Length: 1135
Content-Type: application/json; charset=utf-8
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
MS-RequestId: 17a2658e-d2cc-439b-a2f0-2aefd9344fbc
MS-CV: WtFy3zI8V0u2lnT9.0
MS-ServerId: 020021921
Date: Wed, 25 Jan 2017 23:01:08 GMT
{
"id": "cf3b0e37-be0b-4cdd-b584-d1a97d98a922",
"referenceCustomerId": "4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04",
"billingCycle": "none",
"lineItems": [{
"lineItemNumber": 0,
"offerId": "195416C1-3447-423A-B37B-EE59A99A19C4",
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"friendlyName": "new offer purchase",
"quantity": 5,
"links": {
"subscription": {
"uri": "/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"method": "GET",
"headers": []
}
}
}, {
"lineItemNumber": 1,
"offerId": "2828BE95-46BA-4F91-B2FD-0BEF192ECF60",
"subscriptionId": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
"friendlyName": "Some friendly name",
"quantity": 2,
"links": {
"subscription": {
"uri": "/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
"method": "GET",
"headers": []
}
}
}
],
"creationDate": "2017-01-25T14:53:12.093-08:00",
"links": {
"self": {
"uri": "/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/orders/cf3b0e37-be0b-4cdd-b584-d1a97d98a922",
"method": "GET",
"headers": []
}
},
"attributes": {
"etag": "eyJpZCI6ImNmM2IwZTM3LWJlMGItNGNkZC1iNTg0LWQxYTk3ZDk4YTkyMiIsInZlcnNpb24iOjJ9",
"objectType": "Order"
}
}