Comprar un complemento para una suscripción

Se aplica a: Centro de partners | Centro de partners operado por 21Vianet | Centro de partners para Microsoft Cloud for US Government

Cómo comprar un complemento en una suscripción existente.

Requisitos previos

  • Credenciales tal como se describen en el artículo Autenticación del Centro de partners. Este escenario admite la autenticación con las 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 si selecciona el área de trabajo Clientes , 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).

  • Un identificador de suscripción. Esta es la suscripción existente para la que se va a comprar una oferta de complemento.

  • Identificador de oferta que identifica la oferta de complemento que se va a comprar.

Compra de un complemento a través del código

Al comprar un complemento en una suscripción, actualiza el pedido de suscripción original con el pedido del complemento. A continuación, customerId es el identificador de cliente, subscriptionId es el identificador de suscripción y addOnOfferId es el identificador de oferta del complemento.

Estos son los pasos que debe realizar:

  1. Obtenga una interfaz para las operaciones de la suscripción.

    var subscriptionOperations = partnerOperations.Customers.ById(customerId).Subscriptions.ById(subscriptionId);
    
  2. Use esa interfaz para crear instancias de un objeto de suscripción. Esto le obtiene los detalles de la suscripción primaria, incluido el identificador de pedido.

    var parentSubscription = subscriptionOperations.Get();
    
  3. Cree una instancia de un nuevo objeto Order . Esta instancia de pedido se usa para actualizar el pedido original usado para comprar la suscripción. Agregue un elemento de una sola línea al orden que representa el complemento.

    var orderToUpdate = new Order()
    {
        ReferenceCustomerId = customerId,
        LineItems = new List<OrderLineItem>()
        {
            new OrderLineItem()
            {
                LineItemNumber = 0,
                OfferId = addOnOfferId,
                FriendlyName = "Some friendly name",
                Quantity = 2,
                ParentSubscriptionId = subscriptionId
            }
        }
    };
    
  4. Actualice el pedido original de la suscripción con el nuevo pedido para el complemento.

    Order updatedOrder = partnerOperations.Customers.ById(customerId).Orders.ById(parentSubscription.OrderId).Patch(orderToUpdate);
    

C#

Para comprar un complemento, empiece por obtener una interfaz para las operaciones de suscripción mediante una llamada al método IAggregatePartner.Customers.ById con el identificador de cliente para identificar al cliente y el método Subscriptions.ById para identificar la suscripción que tiene la oferta de complemento. Use esa interfaz para recuperar los detalles de la suscripción mediante una llamada a Get. Los detalles de la suscripción contienen el identificador de pedido del pedido de suscripción, que es el orden que se va a actualizar con el complemento.

A continuación, cree una instancia de un nuevo objeto Order y rellénelo con una única instancia de LineItem que contenga la información para identificar el complemento, como se muestra en el siguiente fragmento de código. Usará este nuevo objeto para actualizar el pedido de suscripción con el complemento. Por último, llame al método Patch para actualizar el pedido de suscripción, después de identificar primero al cliente con IAggregatePartner.Customers.ById y el pedido con Orders.ById.

// IAggregatePartner partnerOperations;
// string customerId;
// string subscriptionId;
// string addOnOfferId;

// Get an interface to the operations for the subscription.
var subscriptionOperations = partnerOperations.Customers.ById(customerId).Subscriptions.ById(subscriptionId);

// Get the parent subscription details.
var parentSubscription = subscriptionOperations.Get();

// In order to buy an add-on subscription for this offer, we need to patch/update the order through which the base offer was purchased
// by creating an order object with a single line item which represents the add-on offer purchase.
var orderToUpdate = new Order()
{
    ReferenceCustomerId = customerId,
    LineItems = new List<OrderLineItem>()
    {
        new OrderLineItem()
        {
            LineItemNumber = 0,
            OfferId = addOnOfferId,
            FriendlyName = "Some friendly name",
            Quantity = 2,
            ParentSubscriptionId = subscriptionId
        }
    }
};

// Update the order to apply the add on purchase.
Order updatedOrder = partnerOperations.Customers.ById(customerId).Orders.ById(parentSubscription.OrderId).Patch(orderToUpdate);

Ejemplo: Aplicación de prueba de consola. Project: Clase de ejemplos del SDK del Centro de partners: AddSubscriptionAddOn.cs

Solicitud REST

Sintaxis de la solicitud

Método URI de solicitud
PATCH {baseURL}/v1/customers/{customer-tenant-id}/orders/{order-id} HTTP/1.1

Parámetros del identificador URI

Use los parámetros siguientes para identificar el cliente y el pedido.

Nombre Tipo Obligatorio Descripción
customer-tenant-id guid Y El valor es un GUID con formato customer-tenant-id que identifica al cliente.
order-id guid Y Identificador de pedido.

Encabezados de solicitud

Para obtener más información, consulta Encabezados REST del Centro de partners.

Cuerpo de la solicitud

En las tablas siguientes se describen las propiedades del cuerpo de la solicitud.

Pedido de

Nombre Tipo Obligatorio Descripción
Identificador string N Identificador de pedido.
ReferenceCustomerId string Y Identificador de cliente.
LineItems matriz de objetos Y Matriz de objetos OrderLineItem .
CreationDate string N La fecha en que se creó el pedido, en formato de fecha y hora.
Atributos object N Contiene "ObjectType": "Order".

OrderLineItem

Nombre Tipo Obligatorio Descripción
LineItemNumber number Y Número de elemento de línea, empezando por 0.
OfferId string Y Identificador de la oferta del complemento.
SubscriptionId string N Identificador de la suscripción de complemento comprada.
ParentSubscriptionId string Y Identificador de la suscripción primaria que tiene la oferta de complemento.
FriendlyName string No Nombre descriptivo de este elemento de línea.
Cantidad number Y Número de licencias.
PartnerIdOnRecord string No PartnerID del asociado de registro.
Atributos object No Contiene "ObjectType": "OrderLineItem".

Ejemplo de solicitud

PATCH https://api.partnercenter.microsoft.com/v1/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/orders/CF3B0E37-BE0B-4CDD-B584-D1A97D98A922 HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 17a2658e-d2cc-439b-a2f0-2aefd9344fbc
MS-CorrelationId: 60efdd24-17ef-4080-9b02-4fc315f916ff
X-Locale: en-US
Content-Type: application/json
Host: api.partnercenter.microsoft.com
Content-Length: 414
Expect: 100-continue

{
    "Id": null,
    "ReferenceCustomerId": "4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04",
    "LineItems": [{
            "LineItemNumber": 0,
            "OfferId": "2828BE95-46BA-4F91-B2FD-0BEF192ECF60",
            "SubscriptionId": null,
            "ParentSubscriptionId": "1C2B75C1-74A5-472A-A729-7F8CEFC477F9",
            "FriendlyName": "Some friendly name",
            "Quantity": 2,
            "PartnerIdOnRecord": null,
            "Attributes": {
                "ObjectType": "OrderLineItem"
            }
        }
    ],
    "CreationDate": null,
    "Attributes": {
        "ObjectType": "Order"
    }
}

Respuesta REST

Si se ejecuta correctamente, este método devuelve el orden de suscripción actualizado 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 si la operación se ha realizado correctamente o con errores y proporciona información de depuración adicional. Use una herramienta de seguimiento de red para leer este código, el tipo de error y los parámetros adicionales. Para obtener la lista completa, consulta Códigos de error del Centro de partners.

Ejemplo de respuesta

HTTP/1.1 200 OK
Content-Length: 1135
Content-Type: application/json; charset=utf-8
MS-CorrelationId: 60efdd24-17ef-4080-9b02-4fc315f916ff
MS-RequestId: 17a2658e-d2cc-439b-a2f0-2aefd9344fbc
MS-CV: WtFy3zI8V0u2lnT9.0
MS-ServerId: 020021921
Date: Wed, 25 Jan 2017 23:01:08 GMT

{
    "id": "cf3b0e37-be0b-4cdd-b584-d1a97d98a922",
    "referenceCustomerId": "4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04",
    "billingCycle": "none",
    "lineItems": [{
            "lineItemNumber": 0,
            "offerId": "195416C1-3447-423A-B37B-EE59A99A19C4",
            "subscriptionId": "1C2B75C1-74A5-472A-A729-7F8CEFC477F9",
            "friendlyName": "new offer purchase",
            "quantity": 5,
            "links": {
                "subscription": {
                    "uri": "/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/subscriptions/1C2B75C1-74A5-472A-A729-7F8CEFC477F9",
                    "method": "GET",
                    "headers": []
                }
            }
        }, {
            "lineItemNumber": 1,
            "offerId": "2828BE95-46BA-4F91-B2FD-0BEF192ECF60",
            "subscriptionId": "968BA1CF-C146-4ADF-A300-308DCF718EEE",
            "friendlyName": "Some friendly name",
            "quantity": 2,
            "links": {
                "subscription": {
                    "uri": "/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/subscriptions/968BA1CF-C146-4ADF-A300-308DCF718EEE",
                    "method": "GET",
                    "headers": []
                }
            }
        }
    ],
    "creationDate": "2017-01-25T14:53:12.093-08:00",
    "links": {
        "self": {
            "uri": "/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/orders/cf3b0e37-be0b-4cdd-b584-d1a97d98a922",
            "method": "GET",
            "headers": []
        }
    },
    "attributes": {
        "etag": "eyJpZCI6ImNmM2IwZTM3LWJlMGItNGNkZC1iNTg0LWQxYTk3ZDk4YTkyMiIsInZlcnNpb24iOjJ9",
        "objectType": "Order"
    }
}