Comprar um complemento para uma assinatura

Aplica-se a: Partner Center | Partner Center operado pela 21Vianet | Partner Center para o Microsoft Cloud for US Government

Como comprar um complemento para uma assinatura existente.

Pré-requisitos

  • Credenciais, conforme descrito em Autenticação do Partner Center. Esse cenário dá suporte à autenticação com credenciais autônomas de Aplicativo e Aplicativo+Usuário.

  • Uma ID do cliente (customer-tenant-id). Se você não souber a ID do cliente, poderá pesquisá-la no Partner Center selecionando o workspace Clientes e, em seguida, o cliente na lista de clientes e, em seguida, Conta. Na página Conta do cliente, procure a ID da Microsoft na seção Informações da Conta do Cliente. A ID da Microsoft é igual à ID do cliente (customer-tenant-id).

  • Uma ID de assinatura. Essa é a assinatura existente para a qual comprar uma oferta de complemento.

  • Uma ID de oferta que identifica a oferta de complemento a ser comprada.

Comprar um complemento por meio de código

Ao comprar um complemento para uma assinatura, você está atualizando o pedido de assinatura original com o pedido do complemento. No seguinte, customerId é a ID do cliente, subscriptionId é a ID da assinatura e addOnOfferId é a ID da oferta para o complemento.

Aqui estão as etapas para fazer isso:

  1. Obtenha uma interface para as operações da assinatura.

    var subscriptionOperations = partnerOperations.Customers.ById(customerId).Subscriptions.ById(subscriptionId);
    
  2. Use essa interface para instanciar um objeto de assinatura. Isso obtém os detalhes da assinatura pai, incluindo a ID do pedido.

    var parentSubscription = subscriptionOperations.Get();
    
  3. Instancie um novo objeto Order . Essa instância de pedido é usada para atualizar o pedido original usado para comprar a assinatura. Adicione um item de linha única à ordem que representa o complemento.

    var orderToUpdate = new Order()
    {
        ReferenceCustomerId = customerId,
        LineItems = new List<OrderLineItem>()
        {
            new OrderLineItem()
            {
                LineItemNumber = 0,
                OfferId = addOnOfferId,
                FriendlyName = "Some friendly name",
                Quantity = 2,
                ParentSubscriptionId = subscriptionId
            }
        }
    };
    
  4. Atualize o pedido original da assinatura com o novo pedido para o complemento.

    Order updatedOrder = partnerOperations.Customers.ById(customerId).Orders.ById(parentSubscription.OrderId).Patch(orderToUpdate);
    

C#

Para comprar um complemento, comece obtendo uma interface para as operações de assinatura chamando o método IAggregatePartner.Customers.ById com a ID do cliente para identificar o cliente e o método Subscriptions.ById para identificar a assinatura que tem a oferta de complemento. Use essa interface para recuperar os detalhes da assinatura chamando Get. Os detalhes da assinatura contêm a ID do pedido da assinatura, que é a ordem a ser atualizada com o complemento.

Em seguida, instancie um novo objeto Order e preencha-o com uma única instância lineItem que contém as informações para identificar o complemento, conforme mostrado no snippet de código a seguir. Você usará esse novo objeto para atualizar o pedido de assinatura com o complemento. Por fim, chame o método Patch para atualizar o pedido de assinatura, depois de primeiro identificar o cliente com IAggregatePartner.Customers.ById e o pedido com 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);

Exemplo: aplicativo de teste de console. Projeto: Classe de exemplos do SDK do Partner Center: AddSubscriptionAddOn.cs

Solicitação REST

Sintaxe da solicitação

Método URI da solicitação
PATCH {baseURL}/v1/customers/{customer-tenant-id}/orders/{order-id} HTTP/1.1

Parâmetros do URI

Use os parâmetros a seguir para identificar o cliente e o pedido.

Nome Type Obrigatório Descrição
customer-tenant-id guid Y O valor é um GUID formatado customer-tenant-id que identifica o cliente.
order-id guid Y O identificador de pedido.

Cabeçalhos de solicitação

Para obter mais informações, confira Cabeçalhos REST do Partner Center.

Corpo da solicitação

As tabelas a seguir descrevem as propriedades no corpo da solicitação.

Order

Nome Type Obrigatório Descrição
ID string N A ID do pedido.
ReferenceCustomerId string S O ID do cliente.
LineItems matriz de objetos Y Uma matriz de objetos OrderLineItem .
CreationDate string N A data em que o pedido foi criado, no formato de data e hora.
Atributos objeto N Contém "ObjectType": "Order".

OrderLineItem

Nome Type Obrigatório Descrição
LineItemNumber número Y O número do item de linha, começando com 0.
OfferId string S A ID da oferta do complemento.
SubscriptionId string N A ID da assinatura do complemento adquirida.
ParentSubscriptionId string S A ID da assinatura pai que tem a oferta de complemento.
FriendlyName string N O nome amigável para este item de linha.
Quantidade número Y Número de licenças.
PartnerIdOnRecord string N A PartnerID do parceiro de registro.
Atributos objeto N Contém "ObjectType": "OrderLineItem".

Exemplo de solicitação

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: 60efdd24-17ef-4080-9b02-4fc315f916ff
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": "1C2B75C1-74A5-472A-A729-7F8CEFC477F9",
            "FriendlyName": "Some friendly name",
            "Quantity": 2,
            "PartnerIdOnRecord": null,
            "Attributes": {
                "ObjectType": "OrderLineItem"
            }
        }
    ],
    "CreationDate": null,
    "Attributes": {
        "ObjectType": "Order"
    }
}

Resposta REST

Se tiver êxito, este método retornará a ordem de assinatura atualizada no corpo da resposta.

Códigos de êxito e de erro de resposta

Cada resposta vem com um código de status HTTP que indica êxito ou falha e informações de depuração adicionais. Use uma ferramenta de rastreamento de rede para ler esse código, o tipo de erro e os parâmetros adicionais. Para obter a lista completa, consulte Códigos de erro do Partner Center.

Exemplo de resposta

HTTP/1.1 200 OK
Content-Length: 1135
Content-Type: application/json; charset=utf-8
MS-CorrelationId: 60efdd24-17ef-4080-9b02-4fc315f916ff
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": "1C2B75C1-74A5-472A-A729-7F8CEFC477F9",
            "friendlyName": "new offer purchase",
            "quantity": 5,
            "links": {
                "subscription": {
                    "uri": "/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/subscriptions/1C2B75C1-74A5-472A-A729-7F8CEFC477F9",
                    "method": "GET",
                    "headers": []
                }
            }
        }, {
            "lineItemNumber": 1,
            "offerId": "2828BE95-46BA-4F91-B2FD-0BEF192ECF60",
            "subscriptionId": "968BA1CF-C146-4ADF-A300-308DCF718EEE",
            "friendlyName": "Some friendly name",
            "quantity": 2,
            "links": {
                "subscription": {
                    "uri": "/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/subscriptions/968BA1CF-C146-4ADF-A300-308DCF718EEE",
                    "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"
    }
}