Creación de un pedido para un cliente mediante las API del Centro de partners

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

La creación de un pedido para los productos de instancia reservada de máquina virtual de Azure solo se aplica a:

  • Centro de partners

Para obtener información sobre lo que está disponible actualmente para vender, consulta Ofertas de partners en el programa Proveedor de soluciones en la nube.

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, busque el identificador de Microsoft en la sección Información de la cuenta de cliente. El id. de Microsoft es el mismo que el de cliente (customer-tenant-id).

  • Un identificador de oferta.

C#

Para crear un pedido para un cliente:

  1. Cree una instancia de un objeto Order y establezca la propiedad ReferenceCustomerID en el identificador de cliente para registrar el cliente.

  2. Cree una lista de objetos OrderLineItem y asigne la lista a la propiedad LineItems del pedido. Cada elemento de línea de pedidos contiene la información de compra de una oferta. Debe tener al menos un elemento de línea de pedido.

  3. Obtenga una interfaz para ordenar las operaciones. En primer lugar, llame al método IAggregatePartner.Customers.ById con el identificador de cliente para identificar al cliente. A continuación, recupere la interfaz de la propiedad Orders.

  4. Llame al método Create o CreateAsync y pase el objeto Order.

  5. Para completar la atestación e incluir revendedores adicionales, consulte los ejemplos de solicitud y respuesta siguientes:

Ejemplo de solicitud

{
    "PartnerOnRecordAttestationAccepted":true, 
    "lineItems": [
        {
            "offerId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
            "quantity": 1,
            "lineItemNumber": 0,
            "PartnerIdOnRecord": "873452",
            "AdditionalPartnerIdsOnRecord":["4847383","873452"]
        }
    ],
    "billingCycle": "monthly"
}

Ejemplo de respuesta

{
    "id": "5cf72f146967",
    "alternateId": "5cf72f146967",
    "referenceCustomerId": "f81d98dd-c2f4-499e-a194-5619e260344e",
    "billingCycle": "monthly",
    "currencyCode": "USD",
    "currencySymbol": "$",
    "lineItems": [
        {
            "lineItemNumber": 0,
            "offerId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
            "subscriptionId": "fcddfa52-1da8-4529-d347-50ea51e1e7be",
            "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", "5198C069-3DAA-403A-8660-5BE11BFD12EE" },
                { "scope", "shared" },
                { "duration", "3Years" }
            }
        }
    }
};

var createdOrder = partnerOperations.Customers.ById(customerId).Orders.Create(order);

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

Solicitud REST

Sintaxis de la solicitud

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

Parámetros del identificador 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

compra

En esta tabla se describen las propiedades Order del cuerpo de la solicitud.

Propiedad Type Obligatorio Descripción
id string No Identificador de pedido que se proporciona tras la creación correcta del pedido.
referenceCustomerId string No El identificador del cliente.
billingCycle string No Indica la frecuencia con la que se factura al asociado para este pedido. Los valores admitidos son los nombres de los miembros que se encuentran en BillingCycleType. El valor predeterminado es "Mensual" o "OneTime" al crear el pedido. Este campo se aplica tras la creación correcta del pedido.
lineItems matriz de recursos OrderLineItem Una lista desglosada de las ofertas que el cliente está comprando, incluida la cantidad.
currencyCode string No Solo lectura Moneda utilizada al realizar el pedido. Aplicado tras la creación correcta del pedido.
creationDate datetime No Solo lectura La fecha en que se creó el pedido, en formato de fecha y hora. Aplicado tras la creación correcta del pedido.
status string No Solo lectura Estado del pedido. Los valores admitidos son los nombres de miembro que se encuentran en OrderStatus.
vínculos OrderLinks No Los vínculos de recursos correspondientes al pedido.
atributos ResourceAttributes No Atributos de metadatos correspondientes al pedido.
PartnerOnRecordAttestationAccepted Booleano Confirma la finalización de la atestación

OrderLineItem

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

Nota:

El partnerIdOnRecord solo debe proporcionarse cuando un proveedor indirecto realiza un pedido en nombre de un revendedor indirecto. Se usa para almacenar el PartnerID del revendedor indirecto (nunca el identificador del proveedor indirecto).

Nombre Type Obligatorio Descripción
lineItemNumber int Cada elemento de línea de la colección obtiene un número de línea única, que comienza desde 0 hasta -1.
offerId string El identificador de la oferta. Asegúrese de que la disponibilidad de la oferta es para el segmento correcto.
subscriptionId string No Identificador de la suscripción.
parentSubscriptionId string No Opcional. El id.de la suscripción principal en una oferta de complemento. Solo se aplica a PATCH.
friendlyName string No Opcional. Nombre descriptivo de la suscripción definida por el asociado para ayudar a desambiguar.
quantity int El número de licencias de una suscripción basada en licencia.
customTermEndDate DateTime No Fecha de finalización del primer período de facturación de la nueva suscripción.
partnerIdOnRecord string 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.
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.
vínculos OrderLineItemLinks No Solo lectura Los vínculos de recursos correspondientes al elemento de línea Order.
atributos ResourceAttributes No Atributos de metadatos correspondientes al orderLineItem.
renewsTo Matriz de objetos No Matriz de recursos RenewsTo .
AttestationAccepted bool No Indica el acuerdo para ofrecer o condiciones de SKU. Obligatorio solo para ofertas o sku donde SkuAttestationProperties o OfferAttestationProperties enforceAttestation es True.
AdditionalPartnerIdsOnRecord 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.
RenewsTo

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 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": "3D5ECED6-1151-44C7-AEE6-70A4BB725666",
        "scope": "shared",
        "duration": "1Year"
      },
      "OfferId": "DZH318Z0BQ4B:0047:DZH318Z0DSM8",
      "FriendlyName": "A_sample_Azure_RI",
      "Quantity": 1
    }
  ]
}

Respuesta REST

Si se ejecuta correctamente, el método devuelve un recurso Order en el cuerpo de la respuesta.

Si el pedido contiene una o varias suscripciones, los valores de identificador de suscripción respectivos solo aparecerán en la respuesta REST si las suscripciones correspondientes se han aprovisionado en el momento de la llamada API. Las suscripciones de aprovisionamiento se producen de forma asincrónica y, por lo tanto, es posible que los valores de identificador de suscripción no siempre estén visibles en la respuesta REST de la llamada Create Order. Sin embargo, una vez aprovisionadas las suscripciones respectivas, se puede acceder a sus valores de identificador de suscripción a través de las llamadas a la API Get Orders y Get Order by ID.

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, consulte Códigos de error del Centro de partners.

Ejemplo de respuesta

HTTP/1.1 201 Created
Content-Length: 788
Content-Type: application/json; charset=utf-8
MS-CorrelationId: b593cbb7-b358-4b31-81fc-e60b9c277a7f
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"
    }
}