Creación de un carro con un pedido de cliente
Se aplica a: Centro de partners | Centro de partners operado por 21Vianet | Centro de partners para Microsoft Cloud for US Government
Puede agregar un pedido para un cliente en un carro. Para obtener más información sobre lo que está disponible actualmente para vender, consulta Ofertas de partners en el programa Proveedor de soluciones en la nube.
Nota:
Los carros expiran 7 días a partir de la creación inicial.
Requisitos previos
Credenciales tal como se describen en el artículo Autenticación del Centro de partners. Este escenario admite la autenticación con credenciales de aplicación independiente y app+usuario.
Un id. de cliente (
customer-tenant-id
). Si no conoce el identificador del cliente, puede buscarlo en el Centro de partners seleccionando el área de trabajo Clientes , luego el cliente de la lista de clientes y, a continuación , Cuenta. En la página Cuenta del cliente, busca el Id. de Microsoft en la sección Información de la cuenta del cliente. El id. de Microsoft es el mismo que el de cliente (customer-tenant-id
).
C#
Para crear un pedido para un cliente:
Cree una instancia de un objeto Cart.
Cree una lista de objetos CartLineItem y asigne la lista a la propiedad LineItems del carro. Cada artículo de línea de carro contiene la información de compra de un producto. Debe tener al menos un elemento de línea de carro.
Obtenga una interfaz para realizar operaciones de carro llamando al método IAggregatePartner.Customers.ById con el identificador de cliente para identificar al cliente y, a continuación, recuperando la interfaz de la propiedad Cart .
Llame al método Create o CreateAsync para crear el carro.
Para completar la atestación e incluir otros revendedores, consulte los ejemplos de solicitud y respuesta siguientes:
Solicitud de ejemplo
{
"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"
}
]
}
]
}
Ejemplo de respuesta
{
"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"
}
}
Ejemplo 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
El SDK de Java del Centro de partners se puede usar para administrar los recursos del Centro de partners. Es un proyecto de código abierto mantenido por la comunidad de partners y no es compatible oficialmente con Microsoft. Puedes obtener ayuda de la comunidad o abrir una incidencia en GitHub si se produce un problema.
Para crear un pedido para un cliente:
Cree una instancia de un objeto Cart.
Cree una lista de objetos CartLineItem y asigne la lista a los elementos de línea del carro. Cada artículo de línea de carro contiene la información de compra de un producto. Debe tener al menos un elemento de línea de carro.
Obtenga una interfaz para las operaciones de carro llamando a la función IAggregatePartner.getCustomers().byId con el identificador de cliente para identificar al cliente y, a continuación, recuperando la interfaz de la función getCart .
Llame a la función create para crear el carro.
Ejemplo 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
El módulo de PowerShell del Centro de partners se puede usar para administrar los recursos del Centro de partners. Es un proyecto de código abierto mantenido por la comunidad de partners y no es compatible oficialmente con Microsoft. Puedes obtener ayuda de la comunidad o abrir una incidencia en GitHub si se produce un problema.
Para crear un pedido para un cliente:
Cree una instancia de un objeto Cart.
Cree una lista de objetos CartLineItem y asigne la lista a los elementos de línea del carro. Cada artículo de línea de carro contiene la información de compra de un producto. Debe tener al menos un elemento de línea de carro.
Ejecute el comando New-PartnerCustomerCart para crear el carro.
# $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
Solicitud REST
Sintaxis de la solicitud
Método | URI de solicitud |
---|---|
POST | {baseURL}/v1/customers/{customer-id}/carts HTTP/1.1 |
Parámetro de URI
Use el siguiente parámetro de ruta de acceso para identificar al cliente.
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
customer-id | string | Sí | Identificador de cliente con formato GUID que identifica al cliente. |
Encabezados de solicitud
Para obtener más información, consulta Encabezados REST del Centro de partners.
Cuerpo de la solicitud
En esta tabla se describen las propiedades cart en el cuerpo de la solicitud.
Propiedad | Type | Obligatorio | Descripción |
---|---|---|---|
id | string | No | Identificador de carro que se suministra tras la creación correcta del carro. |
creationTimeStamp | DateTime | No | Fecha en que se creó el carro, en formato de fecha y hora. Aplicado tras la creación correcta del carro. |
lastModifiedTimeStamp | DateTime | No | Fecha en que el carro se actualizó por última vez, en formato de fecha y hora. Aplicado tras la creación correcta del carro. |
expirationTimeStamp | DateTime | No | La fecha en que expira el carro, en formato de fecha y hora. Aplicado tras la creación correcta del carro. |
lastModifiedUser | string | No | Usuario que actualizó por última vez el carro. Aplicado tras la creación correcta del carro. |
lineItems | Matriz de objetos | Sí | Matriz de recursos CartLineItem . |
PartnerOnRecordAttestationAccepted | Booleano | Sí | Confirma la finalización de la atestación |
En esta tabla se describen las propiedades CartLineItem en el cuerpo de la solicitud.
Propiedad | Type | Obligatorio | Descripción |
---|---|---|---|
id | string | No | Identificador único de un elemento de línea de carro. Aplicado tras la creación correcta del carro. |
catalogId | string | Sí | Identificador del elemento de catálogo. Asegúrese de que la disponibilidad del elemento de catálogo es para el segmento correcto. |
friendlyName | string | No | Opcional. Nombre descriptivo del elemento definido por el asociado para ayudar a desambiguar. |
promotionId | string | No | Opcional. La mayoría de las promociones de NCE se aplicarán automáticamente, pero para que las promociones opcionales (como Bridge to the Cloud 2) se apliquen a un elemento de línea de carro, los partners deben incluir el identificador de promoción en la solicitud de agregar al carro. |
cantidad | int | Sí | Número de licencias o instancias. |
currencyCode | string | No | El código de divisa. |
billingCycle | Object | Sí | Tipo de ciclo de facturación establecido para el período actual. |
customTermEndDate | DateTime | No | Fecha de finalización de una suscripción existente a la que desea coterminar la nueva suscripción. |
participants | Lista de pares de cadenas de objeto | No | Colección de PartnerId en Record (PartnerID) en la compra. |
provisioningContext | Cadena de diccionario<, cadena> | No | Información necesaria para el aprovisionamiento de algunos elementos del catálogo. La propiedad provisioningVariables de una SKU indica qué propiedades son necesarias para elementos específicos del catálogo. |
orderGroup | string | No | Un grupo para indicar qué elementos se pueden colocar juntos. |
error | Object | No | Se aplica después de crear el carro si se produce un error. |
renewsTo | Matriz de objetos | No | Matriz de recursos RenewsTo . |
AttestationAccepted | Booleano | No | Indica el acuerdo para ofrecer o condiciones de SKU. Obligatorio solo para ofertas o sku donde SkuAttestationProperties o OfferAttestationProperties enforceAttestation es True. |
transaction_reseller | Cadena | No | Cuando un proveedor indirecto realiza un pedido en nombre de un revendedor indirecto, rellene este campo con el PartnerID del revendedor indirecto solo (nunca el identificador del proveedor indirecto). Esto garantiza una contabilidad adecuada de los incentivos. |
additional_transaction_reseller | Cadena | No | Cuando un proveedor indirecto realiza un pedido en nombre de un revendedor indirecto, rellene este campo con el PartnerID del revendedor indirecto adicional ( nunca el identificador del proveedor indirecto). Los incentivos no son aplicables a estos revendedores adicionales. Solo se puede especificar un máximo de 5 revendedores indirectos. Solo se trata de asociados aplicables que realizan transacciones en países o regiones de la UE/AELC. |
En esta tabla se describen las propiedades RenewsTo del cuerpo de la solicitud.
Propiedad | Type | Obligatorio | Descripción |
---|---|---|---|
termDuration | string | No | Representación ISO 8601 de la duración del período de renovación. Los valores admitidos actuales son P1M (1 mes) y P1Y (1 año). |
Ejemplo de solicitud
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 junio de 2023, la versión 3.4.0 más reciente del SDK de .NET del Centro de partners ahora está archivada. Puede descargar esta versión del SDK de GitHub, junto con un archivo Léame que contiene información útil.
Se recomienda a los partners seguir usando las API REST del Centro de partners.
Respuesta REST
Si se ejecuta correctamente, este método devuelve el recurso Cart rellenado en el cuerpo de la respuesta.
Códigos de error y de respuesta correctos
Cada respuesta incluye un código de estado HTTP que indica información de éxito o error y depuración. Use una herramienta de seguimiento de red para leer este código, tipo de error y otros parámetros. Para obtener la lista completa, consulte Códigos de error.
Ejemplo de respuesta
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"
}
}
Ejemplo de nuevos servicios basados en licencias comerciales
Nota:
Las nuevas experiencias comerciales para los servicios basados en licencias incluyen muchas funcionalidades nuevas y están disponibles para todos los Proveedores de soluciones en la nube (CSP). Para más información, consulte Introducción a las nuevas experiencias comerciales.
Ejemplo de solicitud
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
Los elementos de línea de software perpetuo y plan de Azure no admiten la propiedad termDuration. Evite incluir esto mientras acuir estos tipos de elementos.
Respuesta REST
Si se ejecuta correctamente, este método devuelve el recurso Cart rellenado en el cuerpo de la respuesta.
Códigos de error y de respuesta correctos
Cada respuesta incluye un código de estado HTTP que indica éxito o error y otra información de depuración. Use una herramienta de seguimiento de red para leer este código, tipo de error y otros parámetros. Para obtener la lista completa, consulte Códigos de error.
Ejemplo de respuesta
{
"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"
}
}