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 :

  1. Instanciez un objet Order et définissez la propriété ReferenceCustomerID sur l’ID client pour enregistrer le client.

  2. 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.

  3. 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.

  4. Appelez la méthode Create ou CreateAsync et passez l’objet Order.

  5. 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"
    }
}