Crear un carro con complementos para un pedido de cliente

Puede comprar complementos a través de 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:

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.

Los nuevos carros comerciales con complementos son diferentes de las ofertas tradicionales basadas en licencias. Los complementos comerciales nuevos se compran de la misma manera que las ofertas base, no usan la propiedad addonItems . En este tema se incluyen ejemplos de solicitud y respuesta específicamente para una nueva SKU de producto basada en comercio con una SKU de producto de complemento.

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#

Un carro permite la compra de una oferta base y sus complementos correspondientes. Siga estos pasos para crear un carro:

  1. Cree una instancia de un objeto Cart.

  2. Cree una lista de objetos CartLineItem que representen las ofertas base y asigne la lista a la propiedad LineItems del carro.

  3. En cada elemento de línea de carro de la oferta base, rellene la lista de AddOnItems con otros objetos CartLineItem que cada uno representa un complemento que se comprará en esa oferta base.

  4. Obtenga una interfaz para las operaciones de carro mediante IAggregatePartner para llamar al método ICustomerCollection.ById con el identificador de cliente para identificar al cliente y, a continuación, recuperar la interfaz de la propiedad Cart.

  5. Por último, llame al método Create o CreateAsync para crear el carro.

Ejemplo de C#

// IAggregatePartner partnerOperations;
// string customerId;

var cart = new Cart()
    {
        LineItems = new List<CartLineItem>()
        {
            new CartLineItem()
            {
                Id = 0,
                CatalogItemId = "A_base_offer_ID",
                FriendlyName = "Myofferpurchase",
                Quantity = 3,
                BillingCycle = BillingCycleType.Monthly,
                AddonItems = new List<CartLineItem>
                {
                    new CartLineItem
                    {
                        Id = 1,
                        CatalogItemId = "An_addon_item_ID",
                        BillingCycle = BillingCycleType.Monthly,
                        Quantity = 2,
                    },
                    new CartLineItem
                    {
                        Id = 2,
                        CatalogItemId = "Another_addon_item_ID",
                        BillingCycle = BillingCycleType.Monthly,
                        Quantity = 3
                    }
                }
            }
        }
    };

var createdCart = partnerOperations.Customers.ById(customerId).Carts.Create(cart);

Siga estos pasos para crear un carro que permita la compra de complementos en suscripciones base existentes:

  1. Cree un carro con un nuevo CartLineItem que contenga el identificador de suscripción en la propiedad ProvisioningContext con la clave "ParentSubscriptionId".

  2. Llame al método Create o CreateAsync .

// IAggregatePartner partnerOperations;
// string selectedCustomerId;

var cart = new Cart()
    {
        LineItems = new List<CartLineItem>()
        {
            new CartLineItem()
            {
                Id = 0,
                CatalogItemId = "An_addon_item_ID",
                ProvisioningContext = new Dictionary<string, string>
                {
                    {
                        "ParentSubscriptionId", "An_existing_subscription_Id"
                    }
                },
                Quantity = 1,
                BillingCycle = BillingCycleType.Annual,
            }
        }
    };

var createdCart = partnerOperations.Customers.ById(selectedCustomerId).Carts.Create(cart);

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 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 Matriz de recursos CartLineItem .

En esta tabla se describen las propiedades CartLineItem en el cuerpo de la solicitud.

Propiedad Tipo Descripción
id string Identificador único de un elemento de línea de carro. Aplicado tras la creación correcta del carro.
catalogId string Identificador del elemento de catálogo.
friendlyName string Opcional. Nombre descriptivo del elemento definido por el asociado para ayudar a desambiguar.
quantity int Número de licencias o instancias.
currencyCode string El código de divisa.
billingCycle Object Tipo de ciclo de facturación establecido para el período actual.
participants Lista de pares de cadenas de objeto Colección de PartnerId en Record (PartnerID) en la compra.
provisioningContext Cadena de diccionario<, cadena> Contexto que se usa para el aprovisionamiento de la oferta.
orderGroup string Un grupo para indicar qué elementos se pueden colocar juntos.
addonItems Lista de objetos CartLineItem Una colección de artículos de línea de carro para complementos que se comprarán para la suscripción base que resulta de la compra del artículo de línea del carro primario. Esta propiedad solo es para carros basados en licencias tradicionales basados en licencias comerciales, como complementos basados en ofertas. Los elementos de comercio nuevo no usan esta propiedad addonItems .
error Object Se aplica después de crear el carro si se produce un error.

Ejemplo de solicitud (nueva suscripción base) para la licencia tradicional basada en licencias

En el siguiente ejemplo de REST se muestra cómo crear un carro con elementos de complemento para una nueva suscripción base.

POST https://api.partnercenter.microsoft.com/v1/customers/18ac2950-8ea9-4dfc-92a4-ff4d4cd57796/carts HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: f931348a-6312-47d0-a8dd-31a386dedb8f
MS-CorrelationId: f73baf70-bbc3-43d0-8b29-dffa08ff9511

{
    "LineItems": [
        {
            "Id":0,
            "CatalogItemId":"91FD106F-4B2C-4938-95AC-F54F74E9A239",
            "FriendlyName":"Myofferpurchase",
            "Quantity":3,
            "BillingCycle":"monthly",
            "AddonItems": [
                {
                    "Id":1,
                    "CatalogItemId":"C94271D8-B431-4A25-A3C5-A57737A1C909",
                    "Quantity":2,
                    "BillingCycle":"monthly"
                },
                {
                    "Id":2,
                    "CatalogItemId":"43FCE491-76D1-4BCC-B709-8A288786DBAE",
                    "Quantity":3,
                    "BillingCycle":"monthly"
                }
            ]
        }
    ]
}

Ejemplo de solicitud (nueva suscripción base) para un nuevo carro comercial para una oferta base con un complemento

{
    "LineItems": [
        {
            "Id": 0,
            "CatalogItemId":"CFQ7TTC0LFLX:0001:CFQ7TTC0LB30", - Base
            "Quantity": 20,
            "BillingCycle": "Monthly",
            "TermDuration": "P1M"
        },
        {
            "Id": 1,
            "CatalogItemId":"CFQ7TTC0HDJX:0001:CFQ7TTC0K806", - Add on
            "Quantity": 20,
            "BillingCycle": "Monthly",
            "TermDuration": "P1M"
        }
    ]
}

Ejemplo de solicitud (suscripción base existente) para la licencia tradicional basada en licencias

En el siguiente ejemplo de REST se muestra cómo anexar complementos a una suscripción base existente. Este ejemplo solo es relevante para el comercio tradicional basado en licencias, no para el nuevo comercio.

POST https://api.partnercenter.microsoft.com/v1/customers/18ac2950-8ea9-4dfc-92a4-ff4d4cd57796/carts HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 512a777a-5427-452d-9637-18421387e435
MS-CorrelationId: 182474ba-7303-4d0f-870a-8c7fba5ccc4b

{
    "LineItems": [
        {
            "Id":0,
            "CatalogItemId":"C94271D8-B431-4A25-A3C5-A57737A1C909",
            "Quantity":1,
            "BillingCycle":"annual",
            "ProvisioningContext":{"ParentSubscriptionId":"97555B61-7461-477A-A98C-9C76148783E4"}
        }
    ]
}

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 más información de depuración. Use una herramienta de seguimiento de red para leer este código, tipo de error y más parámetros. Para obtener la lista completa, consulte Códigos de error.

Ejemplo de respuesta (nueva suscripción base) para la licencia tradicional basada en licencias

HTTP/1.1 201 Created
Content-Length: 958
Content-Type: application/json
MS-CorrelationId: f73baf70-bbc3-43d0-8b29-dffa08ff9511
MS-RequestId: f931348a-6312-47d0-a8dd-31a386dedb8f
X-Locale: en-US,en-US
Date: Thu, 01 Nov 2018 22:29:05 GMT

{
    "id":"dbe2f8d4-f21d-43e2-9356-cff6387c4ba1",
    "creationTimestamp":"2018-11-01T22:29:03.6900182Z",
    "lastModifiedTimestamp":"2018-11-01T22:29:03.6900182Z",
    "expirationTimestamp":"2018-11-01T22:44:05.0025799Z",
    "lastModifiedUser":"1824b7fc-2fac-4478-b177-66823c40ab75",
    "status":"Active",
    "lineItems": [
        {
            "id":0,
            "catalogItemId":"91FD106F-4B2C-4938-95AC-F54F74E9A239",
            "friendlyName":"Myofferpurchase",
            "quantity":3,
            "currencyCode":"USD",
            "billingCycle":"monthly",
            "orderGroup":"OMS-0",
            "addonItems": [
                {
                    "id":1,
                    "catalogItemId":"C94271D8-B431-4A25-A3C5-A57737A1C909",
                    "quantity":2,
                    "currencyCode":"USD",
                    "billingCycle":"monthly",
                    "orderGroup":"OMS-0"
                },
                {
                    "id":2,
                    "catalogItemId":"43FCE491-76D1-4BCC-B709-8A288786DBAE",
                    "quantity":3,
                    "currencyCode":"USD",
                    "billingCycle":"monthly",
                    "orderGroup":"OMS-0"
                }
            ]
        }
],
    "links": {
        "self": {
            "uri":"/customers/18ac2950-8ea9-4dfc-92a4-ff4d4cd57796/carts/dbe2f8d4-f21d-43e2-9356-cff6387c4ba1",
            "method":"GET",
            "headers":[
            ]
        }
    },
    "attributes": {
        "objectType":"Cart"
    }
}

Ejemplo de respuesta (suscripción base existente) para la licencia tradicional basada en licencias

HTTP/1.1 201 Created
Content-Length: 707
Content-Type: application/json
MS-CorrelationId: 182474ba-7303-4d0f-870a-8c7fba5ccc4b
MS-RequestId: 512a777a-5427-452d-9637-18421387e435
X-Locale: en-US,en-US
Date: Thu, 01 Nov 2018 22:46:18 GMT

{
    "id":"4d927e27-93d1-448b-abe5-819b66ecca22",
    "creationTimestamp":"2018-11-01T22:46:16.2996364Z",
    "lastModifiedTimestamp":"2018-11-01T22:46:16.2996364Z",
    "expirationTimestamp":"2018-11-01T23:01:18.7543264Z",
    "lastModifiedUser":"1824b7fc-2fac-4478-b177-66823c40ab75",
    "status":"Active",
    "lineItems": [
        {
            "id":0,
            "catalogItemId":"C94271D8-B431-4A25-A3C5-A57737A1C909",
            "quantity":1,
            "currencyCode":"USD",
            "billingCycle":"annual",
            "provisioningContext": {
                "parentSubscriptionId":"97555B61-7461-477A-A98C-9C76148783E4"
            },
            "orderGroup":"OMS-0"
        }
    ],
    "links": {
        "self": {
            "uri":"/customers/18ac2950-8ea9-4dfc-92a4-ff4d4cd57796/carts/4d927e27-93d1-448b-abe5-819b66ecca22",
            "method":"GET",
            "headers":[
            ]
        }
    },
    "attributes": {
        "objectType":"Cart"
    }
}

Ejemplo de respuesta para una nueva oferta base basada en licencias comerciales y un complemento

{
    "id": "ea37ea81-efaf-4113-9785-e1c266aea2ed",
    "creationTimestamp": "2022-02-10T16:04:22.4908435Z",
    "lastModifiedTimestamp": "2022-02-10T16:04:22.4908444Z",
    "expirationTimestamp": "2022-02-17T16:04:26.3085755Z",
    "lastModifiedUser": "a7155e79-65e3-42b0-a62a-a41297979782",
    "status": "Active",
    "lineItems": [
        {
            "id": 0,
            "catalogItemId": "CFQ7TTC0LFLX:0001:CFQ7TTC0LB30", - Base
            "quantity": 20,
            "currencyCode": "USD",
            "billingCycle": "monthly",
            "termDuration": "P1M",
            "promotionId": "39NFJQT1PHSN:0008:39NFJQT1Q5J0",
            "provisioningContext": {},
            "orderGroup": "0"
        },
        {
            "id": 1,
            "catalogItemId": "CFQ7TTC0HDJX:0001:CFQ7TTC0K806", - Add on
            "quantity": 20,
            "currencyCode": "USD",
            "billingCycle": "monthly",
            "termDuration": "P1M",
            "provisioningContext": {},
            "orderGroup": "0"
        }
    ],
    "links": {
        "self": {
            "uri": "/customers/3a15e1df-b095-41d4-9029-27a5974c2458/carts/ea37ea81-efaf-4113-9785-e1c266aea2ed",
            "method": "GET",
            "headers": []
        }
    },
    "attributes": {
        "objectType": "Cart"
    }
}