Criar um pedido para um cliente usando APIs do Partner Center

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

A criação de um pedido para produtos de instância de VM reservada do Azure se aplica somente a:

  • Partner Center

Para obter informações sobre o que está disponível atualmente para venda, consulte Ofertas de parceiros no programa Provedor de Soluções na Nuvem.

Pré-requisitos

  • Credenciais, conforme descrito em Autenticação do Partner Center. Esse cenário oferece 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á procurá-la no Partner Center selecionando o espaço de trabalho Clientes, 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).

  • Um identificador de oferta.

C#

Para criar um pedido para um cliente:

  1. Instancie um objeto Order e defina a propriedade ReferenceCustomerID como a ID do cliente para registrar o cliente.

  2. Crie uma lista de objetos OrderLineItem e atribua a lista à propriedade LineItems do pedido. Cada item de linha do pedido contém as informações de compra de uma oferta. Você deve ter pelo menos um item de linha de pedido.

  3. Obtenha uma interface para ordenar operações. Primeiro, chame o método IAggregatePartner.Customers.ById com o ID do cliente para identificar o cliente. Em seguida, recupere a interface da propriedade Orders .

  4. Chame o método Create ou CreateAsync e passe o objeto Order.

  5. Para concluir o atestado e incluir revendedores adicionais, consulte os seguintes exemplos de exemplos de solicitação e resposta:

Exemplo de solicitação

{
    "PartnerOnRecordAttestationAccepted":true, 
    "lineItems": [
        {
            "offerId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
            "quantity": 1,
            "lineItemNumber": 0,
            "PartnerIdOnRecord": "873452",
            "AdditionalPartnerIdsOnRecord":["4847383","873452"]
        }
    ],
    "billingCycle": "monthly"
}

Exemplo de resposta

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

Exemplo: Aplicativo de teste de console. Projeto: Exemplos de SDK do Partner Center Classe: CreateOrder.cs

Solicitação REST

Sintaxe da solicitação

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

Parâmetros do URI

Use o seguinte parâmetro de caminho para identificar o cliente.

Nome Digitar Obrigatória Descrição
id do cliente string Sim Um ID de cliente formatado por GUID que identifica o cliente.

Cabeçalhos da solicitação

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

Corpo da solicitação

Pedido

Esta tabela descreve as propriedades Order no corpo da solicitação.

Propriedade Type Obrigatória Descrição
id string Não Um identificador de pedido que é fornecido após a criação bem-sucedida do pedido.
referenceCustomerId string Não O identificador do cliente.
billingCycle string Não Indica a frequência com que o parceiro é cobrado por este pedido. Os valores suportados são os nomes de membros encontrados em BillingCycleType. O padrão é "Mensal" ou "OneTime" na criação do pedido. Este campo é aplicado após a criação bem-sucedida da ordem.
lineItems matriz de recursos OrderLineItem Sim Uma lista detalhada das ofertas que o cliente está comprando, incluindo a quantidade.
currencyCode string Não Somente leitura. A moeda usada ao fazer o pedido. Aplicado após a criação bem-sucedida da ordem.
creationDate datetime Não Somente leitura. A data em que o pedido foi criado, no formato de data e hora. Aplicado após a criação bem-sucedida da ordem.
status string Não Somente leitura. O status do pedido. Os valores suportados são os nomes de membro encontrados em OrderStatus.
links OrderLinks Não Os links de recursos correspondentes à Ordem.
Atributos ResourceAttributes Não Os atributos de metadados correspondentes à Ordem.
PartnerOnRecordAttestationAceito Booliano Sim Confirma a conclusão do Atestado

OrderLineItem

Esta tabela descreve as propriedades OrderLineItem no corpo da solicitação.

Observação

O partnerIdOnRecord só deve ser fornecido quando um provedor indireto faz um pedido em nome de um revendedor indireto. Ele é usado para armazenar o PartnerID do revendedor indireto apenas (nunca o ID do provedor indireto).

Nome Digitar Obrigatória Descrição
lineItemNumber int Sim Cada item de linha na coleção recebe um número de linha exclusivo, contando de 0 para count-1.
offerId string Sim O identificador da oferta. Garanta que a disponibilidade da oferta é para o segmento correto.
subscriptionId string Não O identificador da assinatura.
parentSubscriptionId string Não Opcional. O ID da assinatura pai em uma oferta complementar. Aplica-se somente ao PATCH.
friendlyName string Não Opcional. O nome amigável para a assinatura definido pelo parceiro para ajudar a desambiguar.
quantity int Sim O número de licenças para uma assinatura com base em licença.
customTermEndDate DateTime Não A data de término do primeiro período de cobrança da nova assinatura.
partnerIdOnRecord string Não Quando um provedor indireto fizer um pedido em nome de um revendedor indireto, preencha esse campo apenas com o PartnerID do revendedor indireto (nunca o ID do provedor indireto). Isso garante a contabilidade adequada para incentivos.
provisionamentoContexto Cadeia de caracteres do dicionário<, cadeia de caracteres> Não Informações necessárias para o provisionamento de alguns itens no catálogo. A propriedade provisioningVariables em uma SKU indica quais propriedades são necessárias para itens específicos no catálogo.
links OrderLineItemLinks Não Somente leitura. Os links de recurso correspondentes ao item de linha Ordem.
Atributos ResourceAttributes Não Os atributos de metadados correspondentes ao OrderLineItem.
renovarPara Matriz de objetos Não Uma matriz de recursos RenewTo.
AtestadoAceito bool Não Indica concordância com as condições de oferta ou sku. Necessário apenas para ofertas ou skus em que SkuAttestationProperties ou OfferAttestationProperties enforceAttestation é True.
AdicionalPartnerIdsOnRecord String Não Quando um provedor indireto fizer um pedido em nome de um revendedor indireto, preencha esse campo apenas com o PartnerID do revendedor indireto adicional (nunca o ID do provedor indireto). Os incentivos não são aplicáveis a esses revendedores adicionais. Apenas um máximo de 5 Revendedores Indiretos podem ser inseridos. Isto aplica-se apenas aos parceiros que transacionam dentro dos países/regiões da UE/EFTA.
RenovarPara

Esta tabela descreve as propriedades RenewTo no corpo da solicitação.

Propriedade Type Obrigatória Descrição
prazoDuração string Não Uma representação ISO 8601 da duração do prazo de renovação. Os valores atuais suportados são P1M (1 mês) e P1Y (1 ano).

Exemplo de solicitação

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
    }
  ]
}

Resposta REST

Se bem-sucedido, o método retorna um recurso Order no corpo da resposta.

Se o pedido contiver uma ou mais assinaturas, os respectivos valores de ID de assinatura só aparecerão na resposta REST se as assinaturas correspondentes tiverem sido provisionadas no momento da chamada de API. O provisionamento de assinaturas ocorre de forma assíncrona e, portanto, os valores de ID de assinatura nem sempre podem estar visíveis na resposta REST da chamada Criar Ordem. No entanto, depois que as respectivas assinaturas tiverem sido provisionadas, seus valores de ID de assinatura poderão ser acessados por meio de chamadas de API Get Orders e Get Order by ID.

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 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"
    }
}