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:
Cree una instancia de un objeto Order y establezca la propiedad ReferenceCustomerID en el identificador de cliente para registrar el cliente.
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.
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.
Llame al método Create o CreateAsync y pase el objeto Order.
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": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"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", "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f" },
{ "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 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
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 | Sí | 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 | Sí | 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 | Sí | 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 | Sí | 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. |
cantidad | int | Sí | 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": "cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
"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: aaaa0000-bb11-2222-33cc-444444dddddd
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"
}
}