Créer une commande pour un client à l’aide des API de l’Espace partenaires
S’applique à : Espace partenaires | Espace partenaires géré par 21Vianet | Espace partenaires de Microsoft Cloud for US Government
La création d’une commande pour les produits d’instance de machine virtuelle réservée Azure s’applique uniquement aux points suivants :
- Espace partenaires
Pour plus d’informations sur ce qui est actuellement disponible pour la vente, consultez les offres partenaires dans le programme fournisseur de solutions Cloud.
Prérequis
Informations d’identification, comme décrit dans Authentification auprès de l’Espace partenaires. Ce scénario prend en charge l’authentification avec les informations d’identification d’application et d’application+utilisateur autonomes.
ID du client (
customer-tenant-id
). Si vous ne connaissez pas l’ID du client, vous pouvez le rechercher dans l’Espace de partenaires en sélectionnant l’espace de travail Clients, puis le client dans la liste des clients, puis compte. Dans la page Compte du client, recherchez l’ID Microsoft dans la section Informations sur le compte client. L’ID Microsoft est le même que l’ID de client (customer-tenant-id
).Identificateur d’offre.
C#
Pour créer une commande pour un client :
Instanciez un objet Order et définissez la propriété ReferenceCustomerID sur l’ID client pour enregistrer le client.
Créez une liste d’objets OrderLineItem et affectez la liste à la propriété LineItems de l’ordre. Chaque élément de ligne de commande contient les informations d’achat relatives à une offre. Vous devez disposer d’au moins un élément de ligne de commande.
Obtenez une interface pour commander des opérations. Tout d’abord, appelez la méthode IAggregatePartner.Customers.ById avec l’ID client pour identifier le client. Ensuite, récupérez l’interface à partir de la propriété Orders.
Appelez la méthode Create ou CreateAsync et passez l’objet Order.
Pour effectuer l’attestation et inclure des revendeurs supplémentaires, consultez l’exemple suivant d’exemples de demande et de réponse :
Exemple de requête
{
"PartnerOnRecordAttestationAccepted":true,
"lineItems": [
{
"offerId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
"quantity": 1,
"lineItemNumber": 0,
"PartnerIdOnRecord": "873452",
"AdditionalPartnerIdsOnRecord":["4847383","873452"]
}
],
"billingCycle": "monthly"
}
Exemple de réponse
{
"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);
Exemple : Application de test de console. Projet : Classe d’exemples sdk de l’Espace partenaires : CreateOrder.cs
Demande REST
Syntaxe de la requête
Méthode | URI de demande |
---|---|
POST | {baseURL}/v1/customers/{customer-id}/orders HTTP/1.1 |
Paramètres d’URI
Utilisez le paramètre de chemin d’accès suivant pour identifier le client.
Nom | Type | Requise | Description |
---|---|---|---|
id-client | string | Oui | ID client au format GUID qui identifie le client. |
En-têtes de requête
Pour plus d’informations, consultez En-têtes REST de l’Espace Partenaires.
Corps de la demande
Ordre
Ce tableau décrit les propriétés Order dans le corps de la requête.
Propriété | Type | Requise | Description |
---|---|---|---|
id | string | Non | Identificateur de commande fourni lors de la création réussie de l’ordre. |
referenceCustomerId | string | Non | L’identificateur du client. |
billingCycle | string | Non | Indique la fréquence avec laquelle le partenaire est facturé pour cette commande. Les valeurs prises en charge sont les noms des membres trouvés dans BillingCycleType. La valeur par défaut est « Monthly » ou « OneTime » lors de la création de l’ordre. Ce champ est appliqué lors de la création réussie de l’ordre. |
lineItems | tableau de ressources OrderLineItem | Oui | Une liste détaillée des offres que le client achète, y compris la quantité. |
currencyCode | string | Non | Lecture seule. Devise utilisée lors du placement de la commande. Appliqué lors de la création réussie de l’ordre. |
creationDate | DATETIME | Non | Lecture seule. Date à laquelle la commande a été créée, au format date/heure. Appliqué lors de la création réussie de l’ordre. |
statut | string | Non | Lecture seule. État de l’ordre. Les valeurs prises en charge sont les noms de membres trouvés dans OrderStatus. |
liens | OrderLinks | Non | Les liens de ressource correspondant à l’ordre. |
attributs | ResourceAttributes | Non | Attributs de métadonnées correspondant à l’ordre. |
PartnerOnRecordAttestationAccepted | Boolean | Oui | Confirme l’achèvement de l’attestation |
OrderLineItem
Ce tableau décrit les propriétés OrderLineItem dans le corps de la requête.
Remarque
Le partnerIdOnRecord ne doit être fourni que lorsqu’un fournisseur indirect passe une commande pour le compte d’un revendeur indirect. Il est utilisé pour stocker l’ID partenaire du revendeur indirect uniquement (jamais l’ID du fournisseur indirect).
Nom | Type | Requise | Description |
---|---|---|---|
lineItemNumber | int | Oui | Chaque élément de ligne dans la collection obtient un numéro de ligne unique, allant de 0 à nombre-1. |
offerId | string | Oui | Identificateur de l’offre. Vérifiez que la disponibilité de l’offre est pour le segment correct. |
subscriptionId | string | Non | Identificateur de l’abonnement. |
parentSubscriptionId | string | Non | facultatif. ID de l’abonnement parent dans une offre de module complémentaire. S’applique uniquement à PATCH. |
friendlyName | string | Non | facultatif. Nom convivial de l’abonnement défini par le partenaire pour aider à désambiguer. |
quantité | int | Oui | Nombre de licences pour un abonnement basé sur licence. |
customTermEndDate | Date/Heure | Non | Date de fin de la première période de facturation du nouvel abonnement. |
partnerIdOnRecord | string | Non | Lorsqu’un fournisseur indirect place une commande pour le compte d’un revendeur indirect, renseignez ce champ avec l’ID partenaire du revendeur indirect uniquement (jamais l’ID du fournisseur indirect). Cela garantit une comptabilité appropriée des incitations. |
provisioningContext | Chaîne de<dictionnaire, chaîne> | Non | Informations requises pour l’approvisionnement de certains éléments du catalogue. La propriété provisioningVariables dans une référence SKU indique les propriétés requises pour des éléments spécifiques dans le catalogue. |
liens | OrderLineItemLinks | Non | Lecture seule. Liens de ressource correspondant à l’élément de ligne de commande. |
attributs | ResourceAttributes | Non | Attributs de métadonnées correspondant à OrderLineItem. |
renewsTo | Tableau d’objets | Non | Tableau de ressources RenewsTo . |
AttestationAccepted | bool | Non | Indique l’accord pour les conditions d’offre ou de référence SKU. Obligatoire uniquement pour les offres ou références SkuAttestationProperties ou OfferAttestationProperties enforceAttestation is True. |
AdditionalPartnerIdsOnRecord | Chaîne | Non | Lorsqu’un fournisseur indirect place une commande pour le compte d’un revendeur indirect, renseignez ce champ avec l’ID partenaire du revendeur indirect supplémentaire uniquement (jamais l’ID du fournisseur indirect). Les primes incitatives ne s’appliquent pas à ces revendeurs supplémentaires. Seuls un maximum de 5 revendeurs indirects peuvent être entrés. Il s’agit uniquement des partenaires qui effectuent des transactions dans les pays/régions de l’UE/AELE. |
RenewsTo
Ce tableau décrit les propriétés RenewsTo dans le corps de la requête.
Propriété | Type | Requise | Description |
---|---|---|---|
termDuration | string | Non | Représentation ISO 8601 de la durée du renouvellement. Les valeurs prises en charge actuelles sont P1M (1 mois) et P1Y (1 an). |
Exemple de requête
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
}
]
}
Réponse REST
Si elle réussit, la méthode retourne une ressource Order dans le corps de la réponse.
Si l’ordre contient un ou plusieurs abonnements, les valeurs d’ID d’abonnement respectives apparaissent uniquement dans la réponse REST si les abonnements correspondants ont été provisionnés au moment de l’appel d’API. L’approvisionnement des abonnements se produit de manière asynchrone et, par conséquent, les valeurs d’ID d’abonnement peuvent ne pas toujours être visibles dans la réponse REST de l’appel de commande Créer. Toutefois, une fois que les abonnements respectifs ont été approvisionnés, leurs valeurs d’ID d’abonnement sont accessibles via les appels d’API Get Orders et Get Order by ID.
Codes d’erreur et de réussite de la réponse
Chaque réponse est accompagnée d’un code d’état HTTP qui indique la réussite ou l’échec ainsi que des informations de débogage supplémentaires. Utilisez un outil de trace réseau pour lire ce code, le type d’erreur et des paramètres supplémentaires. Pour obtenir la liste complète, consultez les codes d’erreur de l’Espace partenaires.
Exemple de réponse
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"
}
}