Criar um carrinho com um pedido de cliente
Aplica-se a: Partner Center | Partner Center operado pela 21Vianet | Partner Center for Microsoft Cloud for US Government
Você pode adicionar um pedido para um cliente em um carrinho. Para obter mais informações sobre o que está atualmente disponível para venda, consulte Ofertas de parceiros no programa Provedor de Soluções na Nuvem.
Nota
Os carrinhos expiram 7 dias a partir da criação inicial.
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
).
C#
Para criar um pedido para um cliente:
Instanciar um objeto Cart.
Crie uma lista de objetos CartLineItem e atribua a lista à propriedade LineItems do carrinho. Cada item da linha do carrinho contém as informações de compra de um produto. Você deve ter pelo menos um item de linha de carrinho.
Obtenha uma interface para operações de carrinho chamando o método IAggregatePartner.Customers.ById com o ID do cliente para identificar o cliente e, em seguida, recuperando a interface da propriedade Cart .
Chame o método Create ou CreateAsync para criar o carrinho.
Para concluir o atestado e incluir outros revendedores, consulte os seguintes exemplos de exemplos de solicitação e resposta:
Solicitar amostra
{
"PartnerOnRecordAttestationAccepted":true, "lineItems": [
{
"id": 0,
"catalogItemId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
"quantity": 1,
"billingCycle": "monthly",
"termDuration": "P1M",
"renewsTo": null,
"provisioningContext": {},
"customTermEndDate": "2022-02-19T00:00:00Z"
},
{
"id": 1,
"catalogItemId": "CFQ7TTC0LFLS:0002:CFQ7TTC0KDLJ",
"quantity": 2,
"billingCycle": "monthly",
"termDuration": "P1Y",
"participants": [
{
"key": "transaction_reseller",
"value": "5357564"
},
{
"key": "additional_transaction_reseller",
"value": "517285"
},
{
"key": "additional_transaction_reseller",
"value": "5357563"
}
]
}
]
}
Amostra de resposta
{
"id": "3e22b548-647d-4223-9675-1fcb6cb57665",
"creationTimestamp": "2021-08-18T17:29:52.3517492Z",
"lastModifiedTimestamp": "2021-08-18T17:29:52.3517553Z",
"expirationTimestamp": "2021-08-25T17:30:11.2406416Z",
"lastModifiedUser": "da62a0dc-35e9-4601-b48e-a047bd3ec7c1",
"status": "Active",
"lineItems": [
{
"id": 0,
"catalogItemId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1M",
"customTermEndDate": "2022-02-19T00:00:00Z";
"provisioningContext": {},
"orderGroup": "0"
},
{
"id": 1,
"catalogItemId": "CFQ7TTC0LFLS:0002:CFQ7TTC0KDLJ",
"quantity": 2,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1Y",
"participants": [
{
"key": "transaction_reseller",
"value": "5357564"
},
{
"key": "additional_transaction_reseller",
"value": "517285"
},
{
"key": "additional_transaction_reseller",
"value": "5357563"
}
],
"provisioningContext": {},
"orderGroup": "0"
}
],
"links": {
"self": {
"uri": "/customers/f81d98dd-c2f4-499e-a194-5619e260344e/carts/3e22b548-647d-4223-9675-1fcb6cb57665",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Cart"
}
}
Exemplo de C#
// IAggregatePartner partnerOperations;
// string customerId;
// string subscriptionId;
var cart = new Cart()
{
LineItems = new List<CartLineItem>()
{
new CartLineItem()
{
/* Microsoft Azure Subscription */
Id = 0,
CatalogItemId = "MS-AZR-0145P",
Quantity = 1,
BillingCycle = BillingCycleType.Monthly,
TermDuration = "P1Y"
},
new CartLineItem()
{
/* Azure Reserved Instance */
Id = 1,
CatalogItemId = "DZH318Z0BQ36:004G:DZH318Z08C0S",
Quantity = 1,
BillingCycle = BillingCycleType.OneTime,
TermDuration = "P1Y",
ProvisioningContext = new Dictionary<string, string>
{
{ "subscriptionId", subscriptionId },
{ "scope", "shared" }
}
},
new CartLineItem()
{
/* Azure Reserved Instance */
Id = 2,
CatalogItemId = "DZH318Z0BQ36:004J:DZH318Z08B8X",
Quantity = 1,
BillingCycle = BillingCycleType.OneTime,
TermDuration = "P3Y",
ProvisioningContext = new Dictionary<string, string>
{
{ "subscriptionId", subscriptionId },
{ "scope", "shared" }
}
},
new CartLineItem()
{
/* Perpetual Software */
Id = 3,
CatalogItemId = "DG7GMGF0DWM3:0002:DG7GMGF0DT1M",
Quantity = 1,
BillingCycle = BillingCycleType.OneTime
},
new CartLineItem()
{
/* SaaS */
Id = 4,
CatalogItemId = "DZH318Z0BXWC:0002:DZH318Z0BMRV",
Quantity = 1,
BillingCycle = BillingCycleType.Monthly,
TermDuration = "P1M"
},
new CartLineItem()
{
/* SaaS Free Trial */
Id = 5,
CatalogItemId = "DZH318Z0C0WF:0001:DZH318Z0BP69",
Quantity = 10,
BillingCycle = BillingCycleType.None,
TermDuration = "P1M",
RenewsTo = new RenewsTo
{
TermDuration = "P1Y"
}
}
}
};
cart = partnerOperations.Customers.ById(customerId).Carts.Create(cart);
Java
O SDK Java do Partner Center pode ser usado para gerenciar recursos do Partner Center. É um projeto de código aberto mantido pela comunidade de parceiros e não suportado oficialmente pela Microsoft. Você pode obter ajuda da comunidade ou abrir um problema no GitHub se tiver um problema.
Para criar um pedido para um cliente:
Instanciar um objeto Cart.
Crie uma lista de objetos CartLineItem e atribua a lista aos itens de linha do carrinho. Cada item da linha do carrinho contém as informações de compra de um produto. Você deve ter pelo menos um item de linha de carrinho.
Obtenha uma interface para operações de carrinho chamando a função IAggregatePartner.getCustomers().byId com o ID do cliente para identificar o cliente e, em seguida, recuperando a interface da função getCart .
Chame a função create para criar o carrinho.
Exemplo de Java
// IAggregatePartner partnerOperations;
// String customerId;
// String subscriptionId;
// String catalogItemId;
CartLineItem lineItem = new CartLineItem();
lineItem.setBillingCycle(BillingCycleType.OneTime);
lineItem.setCatalogItemId(catalogItemId);
lineItem.setFriendlyName("Sample RI Purchase");
lineItem.setQuantity(1);
Map<String, String> provisioningContext = new HashMap<String,String>();
provisioningContext.put("duration", "3Years");
provisioningContext.put("scope", "shared");
provisioningContext.put("subscriptionId", subscriptionId);
lineItem.setProvisioningContext(provisioningContext);
List<CartLineItem> lineItemList = new ArrayList<CartLineItem>();
lineItemList.add(lineItem);
Cart cart = new Cart();
cart.setLineItems(lineItemList);
Cart cartCreated = partnerOperations.getCustomers().byId(customerId).getCarts().create(cart);
PowerShell
O módulo PowerShell do Partner Center pode ser usado para gerenciar recursos do Partner Center. É um projeto de código aberto mantido pela comunidade de parceiros e não suportado oficialmente pela Microsoft. Você pode obter ajuda da comunidade ou abrir um problema no GitHub se tiver um problema.
Para criar um pedido para um cliente:
Instanciar um objeto Cart.
Crie uma lista de objetos CartLineItem e atribua a lista aos itens de linha do carrinho. Cada item da linha do carrinho contém as informações de compra de um produto. Você deve ter pelo menos um item de linha de carrinho.
Execute o comando New-PartnerCustomerCart para criar o carrinho.
# $customerId
# $subscriptionId
# $catalogItemId
$lineItem = New-Object -TypeName Microsoft.Store.PartnerCenter.PowerShell.Models.Carts.PSCartLineItem
$lineItem.BillingCycle = 'OneTime'
$lineItem.CatalogItemId = $catalogItemId
$lineItem.FriendlyName = 'Sample RI Purchase'
$lineItem.ProvisioningContext.Add('duration', '1Year')
$lineItem.ProvisioningContext.Add('scope', 'shared')
$lineItem.ProvisioningContext.Add('subscriptionId', $subsciptionId)
$lineItem.Quantity = 10
New-PartnerCustomerCart -CustomerId $customerId -LineItems $lineItem
Pedido REST
Sintaxe da solicitação
Método | URI do pedido |
---|---|
POST | {baseURL}/v1/customers/{customer-id}/carrinhos HTTP/1.1 |
Parâmetro 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
Esta tabela descreve as propriedades do carrinho no corpo da solicitação.
Propriedade | Type | Obrigatório | Descrição |
---|---|---|---|
id | string | Não | Um identificador de carrinho que é fornecido após a criação bem-sucedida do carrinho. |
criaçãoTimeStamp | DateTime | Não | A data em que o carrinho foi criado, no formato data-hora. Aplicado após a criação bem-sucedida do carrinho. |
lastModifiedTimeStamp | DateTime | Não | A data em que o carrinho foi atualizado pela última vez, no formato data-hora. Aplicado após a criação bem-sucedida do carrinho. |
expiraçãoTimeStamp | DateTime | Não | A data em que o carrinho expira, no formato data-hora. Aplicado após a criação bem-sucedida do carrinho. |
lastModifiedUser | string | Não | O usuário que atualizou o carrinho pela última vez. Aplicado após a criação bem-sucedida do carrinho. |
lineItems | Matriz de objetos | Sim | Uma matriz de recursos CartLineItem . |
PartnerOnRecordAttestationAccepted | Boolean | Sim | Confirma a conclusão do atestado |
Esta tabela descreve as propriedades CartLineItem no corpo da solicitação.
Propriedade | Type | Obrigatório | Descrição |
---|---|---|---|
id | string | Não | Um identificador exclusivo para um item de linha do carrinho. Aplicado após a criação bem-sucedida do carrinho. |
catalogId | string | Sim | O identificador de item de catálogo. Certifique-se de que a disponibilidade do item de catálogo é para o segmento correto. |
friendlyNome | string | Não | Opcional. O nome amigável para o item definido pelo parceiro para ajudar a desambiguar. |
promotionId | string | Não | Opcional. A maioria das promoções NCE será aplicada automaticamente, no entanto, para promoções opcionais (como Bridge to the Cloud 2) para aplicar a um item de linha de carrinho, os parceiros devem incluir o ID da promoção na solicitação de adicionar ao carrinho. |
quantidade | número inteiro | Sim | O número de licenças ou instâncias. |
currencyCode | string | Não | O código da moeda. |
faturamentoCiclo | Object | Sim | O tipo de ciclo de faturamento definido para o período atual. |
customTermEndDate | DateTime | Não | A data de término de uma assinatura existente para a qual você deseja coencerrar a nova assinatura. |
Participantes | Lista de pares de Object String | Não | Uma coleção de PartnerId on Record (PartnerID) na compra. |
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. |
orderGroup | string | Não | Um grupo para indicar quais itens podem ser colocados juntos. |
error | Object | Não | Aplicado após a criação do carrinho se houver um erro. |
renovarPara | Matriz de objetos | Não | Uma matriz de recursos RenewsTo . |
AtestadoAceito | Boolean | 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. |
transaction_reseller | 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. |
additional_transaction_reseller | 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. |
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 /v1/customers/d6bf25b7-e0a8-4f2d-a31b-97b55cfc774d/carts HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 4fa6dad6-a89f-4875-8247-8294a10ae1cf
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
X-Locale: en-US
MS-PartnerCenter-Client: Partner Center .NET SDK
Content-Type: application/json
Host: api.partnercenter.microsoft.com
Content-Length: 496
Expect: 100-continue
{
"lineItems": [
{
/* Microsoft Azure Subscription */
"id": 0,
"catalogItemId": "MS-AZR-0145P",
"quantity": 1,
"billingCycle": "monthly",
"termDuration": "P1Y"
},
{
/* Azure Reserved Instance */
"id": 1,
"catalogItemId": "DZH318Z0BQ36:004G:DZH318Z08C0S",
"quantity": 1,
"billingCycle": "one_time",
"termDuration": "P1Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "shared"
}
},
{
/* Azure Reserved Instance */
"id": 2,
"catalogItemId": "DZH318Z0BQ36:004J:DZH318Z08B8X",
"quantity": 1,
"billingCycle": "one_time",
"termDuration": "P3Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "single"
}
},
{
/* Perpetual Software */
"id": 3,
"catalogItemId": "DG7GMGF0DWTL:0001:DG7GMGF0DSFM",
"quantity": 1,
"billingCycle": "one_time"
},
{
/* SaaS */
"id": 4,
"catalogItemId": "DZH318Z0BXWC:0002:DZH318Z0BMRV",
"quantity": 1,
"billingCycle": "monthly",
"termDuration": "P1M"
},
{
/* SaaS Free Trial */
"id": 5,
"catalogItemId": "DZH318Z0C0WF:0001:DZH318Z0BP69",
"quantity": 10,
"billingCycle": "none",
"termDuration": "P1M",
"renewsTo": {
"termDuration": "P1Y"
}
}
]
}
Importante
A partir de junho de 2023, a versão 3.4.0 mais recente do SDK do .NET do Partner Center foi arquivada. Você pode baixar a versão do SDK do GitHub, juntamente com um arquivo readme que contém informações úteis.
Os parceiros são incentivados a continuar a usar as APIs REST do Partner Center.
Resposta do REST
Se for bem-sucedido, esse método retornará o recurso Cart preenchido no corpo da resposta.
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 de depuração. Use uma ferramenta de rastreamento de rede para ler esse código, tipo de erro e outros parâmetros. Para obter a lista completa, consulte Códigos de erro.
Exemplo de resposta
HTTP/1.1 201 Created
Content-Length: 764
Content-Type: application/json; charset=utf-8
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
MS-RequestId: 4fa6dad6-a89f-4875-8247-8294a10ae1cf
X-Locale: en-US,en-US
MS-CV: sF/wRa2ih0CzbABc.0
MS-ServerId: 000001
Date: Thu, 15 Mar 2018 17:15:01 GMT
{
"id": "3655b1a0-b1c9-4268-9824-577fdbc4d0be",
"creationTimestamp": "2019-01-16T00:45:41.6062996Z",
"lastModifiedTimestamp": "2019-01-16T00:45:41.6062996Z",
"expirationTimestamp": "2019-01-16T01:00:54.4188497Z",
"lastModifiedUser": "1824b7fc-2fac-4478-b177-66823c40ab75",
"status": "Active",
"lineItems": [
{
"id": 0,
"catalogItemId": "MS-AZR-0145P",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1Y",
"orderGroup": "OMS-0"
},
{
"id": 1,
"catalogItemId": "DZH318Z0BQ36:004G:DZH318Z08C0S",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "one_time",
"termDuration": "P1Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "shared"
},
"orderGroup": "0"
},
{
"id": 2,
"catalogItemId": "DZH318Z0BQ36:004J:DZH318Z08B8X",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "one_time",
"termDuration": "P3Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "shared"
},
"orderGroup": "0"
},
{
"id": 3,
"catalogItemId": "DG7GMGF0DWM3:0002:DG7GMGF0DT1M",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "one_time",
"orderGroup": "0"
},
{
"id": 4,
"catalogItemId": "DZH318Z0BXWC:0002:DZH318Z0BMRV",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1M",
"orderGroup": "1"
},
{
"id": 5,
"catalogItemId": "DZH318Z0C0WF:0001:DZH318Z0BP69",
"quantity": 10,
"currencyCode": "USD",
"billingCycle": "none",
"termDuration": "P1M",
"renewsTo": {
"termDuration": "P1Y"
},
"orderGroup": "2"
}
],
"links": {
"self": {
"uri": "/customers/28045616-f6b9-462f-9701-0d89b5e65c44/carts/3655b1a0-b1c9-4268-9824-577fdbc4d0be",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Cart"
}
}
Exemplo para novos serviços baseados em licença de comércio
Nota
As novas experiências de comércio para serviços baseados em licença incluem muitos recursos novos e estão disponíveis para todos os CSPs (Provedor de Soluções na Nuvem). Para obter mais informações, consulte Visão geral de novas experiências comerciais.
Exemplo de solicitação
POST /v1/customers/932c4101-dc08-461b-b4c1-75d80e905775/carts HTTP/1.1
Host: api.partnercenter.microsoft.com
Content-Type: application/json
Content-Length: 165
{
"LineItems": [
{
"CatalogItemId":"CFQ7TTC0LFLZ:0002:CFQ7TTC0K4TS",
"Quantity": 1,
"TermDuration": "P1M",
"BillingCycle": "Monthly"
}
]
}
Importante
O plano do Azure e os itens de linha de software perpétuo não dão suporte à propriedade termDuration. Evite incluir isso ao usar esses tipos de itens.
Resposta do REST
Se for bem-sucedido, esse método retornará o recurso Cart preenchido no corpo da resposta.
Códigos de sucesso e erro de resposta
Cada resposta vem com um código de status HTTP que indica sucesso ou falha e outras informações de depuração. Use uma ferramenta de rastreamento de rede para ler esse código, tipo de erro e outros parâmetros. Para obter a lista completa, consulte Códigos de erro.
Exemplo de resposta
{
"id": "2517c51b-58cd-4abe-87ed-3ab812401ab4",
"creationTimestamp": "2023-07-11T21:16:11.55149Z",
"lastModifiedTimestamp": "2023-07-11T21:16:11.5515713Z",
"expirationTimestamp": "2023-07-18T21:16:17.2480482Z",
"lastModifiedUser": "9db12087-fbc3-481c-8965-73d44ff88e27",
"status": "Active",
"lineItems": [
{
"id": 0,
"catalogItemId": "CFQ7TTC0LF8S:0001:CFQ7TTC0VZW5",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1Y",
"provisioningContext": {},
"orderGroup": "0",
"pricing": {
"listPrice": 30.4,
"discountedPrice": 30.4,
"proratedPrice": 30.4,
"price": 30.4,
"extendedPrice": 364.8
}
}
],
"links": {
"self": {
"uri": "/customers/ebd8b4c2-4069-46a8-bd70-123d6dec3e39/carts/2517c51b-58cd-4abe-87ed-3ab812401ab4",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Cart"
}
}