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:
Instancie um objeto Order e defina a propriedade ReferenceCustomerID como a ID do cliente para registrar o cliente.
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.
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 .
Chame o método Create ou CreateAsync e passe o objeto Order.
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: 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. |
attributes | 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. |
attributes | 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": "cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
"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: 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"
}
}