Partilhar via


Criar um pedido para um cliente usando APIs do Partner Center

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

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

  • Partner Center

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

Pré-requisitos

  • Credenciais conforme descrito na autenticação do Partner Center. Este cenário oferece suporte à autenticação com credenciais autônomas de Aplicativo e Aplicativo+Usuário.

  • Um ID de cliente (customer-tenant-id). Se não souber o ID do cliente, pode procurá-lo no Partner Center selecionando a área de trabalho 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 é a mesma que a 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 da linha do pedido contém as informações de compra de uma oferta. Você deve ter pelo menos um item de linha de ordem.

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

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

Pedido REST

Sintaxe da solicitação

Método URI do pedido
POST {baseURL}/v1/customers/{customer-id}/pedidos HTTP/1.1

Parâmetros de URI

Use o seguinte parâmetro path para identificar o cliente.

Nome Type Obrigatório Description
ID do cliente string Sim Um ID de cliente formatado em GUID que identifica o cliente.

Cabeçalhos do pedido

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

Corpo do pedido

Ordenar

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

Propriedade Type Obrigatório 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.
faturamentoCiclo 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 é "Monthly" 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 Só de Leitura. A moeda usada ao fazer o pedido. Aplicado após a criação bem-sucedida da ordem.
criaçãoData de criação datetime Não Só de Leitura. A data em que a ordem foi criada, no formato data-hora. Aplicado após a criação bem-sucedida da ordem.
status string Não Só de Leitura. O status do pedido. Os valores suportados são os nomes de membros encontrados em OrderStatus.
ligações OrderLinks Não Os links de recursos correspondentes à Ordem.
atributos ResourceAttributes Não Os atributos de metadados correspondentes à Ordem.
PartnerOnRecordAttestationAccepted Boolean Sim Confirma a conclusão do atestado

OrderLineItem

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

Nota

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

Nome Type Obrigatório Description
lineItemNumber número inteiro Sim Cada item de linha na coleção recebe um número de linha exclusivo, contando de 0 a contagem-1.
offerId string Sim O identificador da oferta. Certifique-se de que a disponibilidade da oferta é para o segmento correto.
subscriptionId cadeia Não O identificador de assinatura.
parentSubscriptionId string Não Opcional. A ID da assinatura pai em uma oferta de complemento. Aplica-se apenas ao PATCH.
friendlyNome string Não Opcional. O nome amigável para a assinatura definido pelo parceiro para ajudar a desambiguar.
quantidade número inteiro Sim O número de licenças para uma assinatura baseada em licença.
customTermEndDate DateTime Não A data final do primeiro período de cobrança da nova assinatura.
parceiroIdOnRecord string Não Quando um fornecedor indireto fizer uma encomenda em nome de um revendedor indireto, preencha este campo apenas com o ID do parceiro do revendedor indireto ( nunca o ID do fornecedor indireto). Isto garante uma contabilização adequada dos incentivos.
provisionamentoContexto Cadeia de dicionário<, string> 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.
ligações OrderLineItemLinks Não Só de Leitura. Os links de recursos 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 RenewsTo .
AtestadoAceito booleano Não Indica acordo para oferecer ou condições de sku. Obrigatório apenas para ofertas ou skus em que SkuAttestationProperties ou OfferAttestationProperties enforceAttestation é True.
AdicionalPartnerIdsOnRecord String Não Quando um fornecedor indireto fizer uma encomenda em nome de um revendedor indireto, preencha este campo apenas com o ID de parceiro do revendedor indireto adicional ( nunca o ID do fornecedor indireto). Os incentivos não são aplicáveis a esses revendedores adicionais. Apenas um máximo de 5 Revendedores Indiretos podem ser inscritos. Isto só é aplicável aos parceiros que efetuam transações dentro dos países/regiões da UE/EFTA.
RenovarPara

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

Propriedade Type Obrigatório Description
termoDuração string Não Uma representação ISO 8601 da duração do período 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": "cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
        "scope": "shared",
        "duration": "1Year"
      },
      "OfferId": "DZH318Z0BQ4B:0047:DZH318Z0DSM8",
      "FriendlyName": "A_sample_Azure_RI",
      "Quantity": 1
    }
  ]
}

Resposta do REST

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

Se o pedido contiver uma ou mais assinaturas, os respetivos 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, uma vez que as respetivas assinaturas tenham sido provisionadas, seus valores de ID de assinatura podem ser acessados por meio de chamadas de API Get Orders e Get Order by ID.

Códigos de sucesso e erro de resposta

Cada resposta vem com um código de status HTTP que indica sucesso ou falha e informações adicionais de depuração. Use uma ferramenta de rastreamento de rede para ler esse código, tipo de erro e 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: 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"
    }
}