Créer un panier avec des modules complémentaires pour une commande clientCreate a cart with add-ons to a customer order

S’applique à :Applies to:

  • Espace partenairesPartner Center

Vous pouvez acheter des modules complémentaires par le biais d’un panier.You can purchase add-ons through a cart. Pour plus d’informations sur ce qui est actuellement disponible pour la vente, consultez offres partenaires dans le programme du fournisseur de solutions Cloud.For more information about what is currently available to sell, see Partner offers in the Cloud Solution Provider program.

PrérequisPrerequisites

  • Informations d’identification, comme décrit dans Authentification auprès de l’Espace partenaires.Credentials as described in Partner Center authentication. Ce scénario prend en charge l’authentification avec les informations d’identification de l’application autonome et de l’application + utilisateur.This scenario supports authentication with both standalone App and App+User credentials.

  • ID du client (customer-tenant-id).A customer ID (customer-tenant-id). Si vous ne connaissez pas l’ID du client, vous pouvez le rechercher dans le tableau de bord de l’Espace partenaires.If you don't know the customer's ID, you can look it up in the Partner Center dashboard. Sélectionnez CSP dans le menu Espace partenaires, puis Clients.Select CSP from the Partner Center menu, followed by Customers. Sélectionnez le client dans la liste des clients, puis Compte.Select the customer from the customer list, then select Account. Dans la page du compte du client, recherchez l’ID Microsoft dans la section Informations sur le compte client.On the customer’s Account page, look for the Microsoft ID in the Customer Account Info section. L’ID Microsoft est le même que l’ID de client (customer-tenant-id).The Microsoft ID is the same as the customer ID (customer-tenant-id).

C#C#

Un panier permet l’achat d’une offre de base et de ses modules complémentaires correspondants.A cart enables the purchase of a base offer and its corresponding add-ons. Pour créer un panier, procédez comme suit :Follow these steps to create a cart:

  1. Instanciez un objet de panier .Instantiate a Cart object.

  2. Créez une liste d’objets CartLineItem qui représentent les offres de base et attribuez la liste à la propriété de liste de propriétés du panier.Create a list of CartLineItem objects which represent the base offer(s), and assign the list to the cart's LineItems property.

  3. Sous l’élément de ligne de panier de chaque offre de base, renseignez la liste des AddOnItems avec d’autres objets CartLineItem qui représentent chacun un module complémentaire qui sera acheté dans le cadre de cette offre de base.Under each base offer's cart line item, populate the list of AddOnItems with other CartLineItem objects that each represent an add-on that will be purchased against that base offer.

  4. Obtenez une interface pour les opérations de panier à l’aide de collection iaggregatepartner pour appeler la méthode ICustomerCollection. méthode BYID avec l’ID client pour identifier le client, puis récupérer l’interface à partir de la propriété Cart .Obtain an interface to cart operations by using IAggregatePartner to call the ICustomerCollection.ById method with the customer ID to identify the customer, and then retrieving the interface from the Cart property.

  5. Enfin, appelez la méthode Create ou CreateAsync pour créer le panier.Finally, call the Create or CreateAsync method to create the cart.

#Exemple CC# example

// IAggregatePartner partnerOperations;
// string customerId;

var cart = new Cart()
    {
        LineItems = new List<CartLineItem>()
        {
            new CartLineItem()
            {
                Id = 0,
                CatalogItemId = "A_base_offer_ID",
                FriendlyName = "Myofferpurchase",
                Quantity = 3,
                BillingCycle = BillingCycleType.Monthly,
                AddonItems = new List<CartLineItem>
                {
                    new CartLineItem
                    {
                        Id = 1,
                        CatalogItemId = "An_addon_item_ID",
                        BillingCycle = BillingCycleType.Monthly,
                        Quantity = 2,
                    },
                    new CartLineItem
                    {
                        Id = 2,
                        CatalogItemId = "Another_addon_item_ID",
                        BillingCycle = BillingCycleType.Monthly,
                        Quantity = 3
                    }
                }
            }
        }
    };

var createdCart = partnerOperations.Customers.ById(customerId).Carts.Create(cart);

Suivez les étapes ci-dessous pour créer un panier permettant d’acheter des modules complémentaires sur des abonnements de base existants :Follow these steps to create a cart which will enable the purchase of add-on(s) against existing base subscription(s):

  1. Créez un panier avec une nouvelle CARTLINEITEM contenant l’ID d’abonnement dans la propriété ProvisioningContext avec la clé « ParentSubscriptionId ».Create a Cart with a new CartLineItem containing the subscription ID in the ProvisioningContext property with key "ParentSubscriptionId".

  2. Appelez la méthode Create ou CreateAsync .Call the Create or CreateAsync method.

// IAggregatePartner partnerOperations;
// string selectedCustomerId;

var cart = new Cart()
    {
        LineItems = new List<CartLineItem>()
        {
            new CartLineItem()
            {
                Id = 0,
                CatalogItemId = "An_addon_item_ID",
                ProvisioningContext = new Dictionary<string, string>
                {
                    {
                        "ParentSubscriptionId", "An_existing_subscription_Id"
                    }
                },
                Quantity = 1,
                BillingCycle = BillingCycleType.Annual,
            }
        }
    };

var createdCart = partnerOperations.Customers.ById(selectedCustomerId).Carts.Create(cart);

Demande RESTREST request

Syntaxe de la requêteRequest syntax

MéthodeMethod URI de requêteRequest URI
POSTPOST {baseURL}/v1/Customers/{Customer-ID}/carts http/1.1{baseURL}/v1/customers/{customer-id}/carts HTTP/1.1

Paramètre d’URIURI parameter

Utilisez le paramètre de chemin d’accès suivant pour identifier le client.Use the following path parameter to identify the customer.

NomName TypeType ObligatoireRequired DescriptionDescription
ID clientcustomer-id stringstring OuiYes ID client au format GUID qui identifie le client.A GUID formatted customer-id that identifies the customer.

En-têtes de requêteRequest headers

Pour plus d’informations, consultez En-têtes REST de l’Espace Partenaires.For more information, see Partner Center REST headers.

Corps de demandeRequest body

Ce tableau décrit les propriétés du panier dans le corps de la demande.This table describes the Cart properties in the request body.

PropriétéProperty TypeType ObligatoireRequired DescriptionDescription
idid stringstring NonNo Identificateur de panier qui est fourni lors de la création réussie du panier.A cart identifier that is supplied upon successful creation of the cart.
creationTimeStampcreationTimeStamp DateTimeDateTime NonNo Date à laquelle le panier a été créé, au format date/heure.The date the cart was created, in date-time format. Appliqué en cas de réussite de la création du panier.Applied upon successful creation of the cart.
lastModifiedTimeStamplastModifiedTimeStamp DateTimeDateTime NonNo Date de la dernière mise à jour du panier, au format date/heure.The date the cart was last updated, in date-time format. Appliqué en cas de réussite de la création du panier.Applied upon successful creation of the cart.
expirationTimeStampexpirationTimeStamp DateTimeDateTime NonNo Date d’expiration du panier, au format date/heure.The date the cart will expire, in date-time format. Appliqué en cas de réussite de la création du panier.Applied upon successful creation of cart.
lastModifiedUserlastModifiedUser stringstring NonNo Utilisateur qui a mis à jour le panier pour la dernière fois.The user who last updated the cart. Appliqué en cas de réussite de la création du panier.Applied upon successful creation of cart.
lineItemslineItems Tableau d’objetsArray of objects OuiYes Tableau de ressources CartLineItem .An Array of CartLineItem resources.

Ce tableau décrit les propriétés CartLineItem dans le corps de la demande.This table describes the CartLineItem properties in the request body.

PropriétéProperty TypeType DescriptionDescription
idid stringstring Identificateur unique pour un élément de ligne de panier.A unique identifier for a cart line item. Appliqué en cas de réussite de la création du panier.Applied upon successful creation of cart.
catalogIdcatalogId stringstring Identificateur de l’élément de catalogue.The catalog item identifier.
friendlyNamefriendlyName stringstring facultatif.Optional. Nom convivial de l’élément défini par le partenaire pour aider à lever toute ambiguïté.The friendly name for the item defined by the partner to help disambiguate.
quantitéquantity intint Nombre de licences ou d’instances.The number of licenses or instances.
currencyCodecurrencyCode stringstring Code de la devise.The currency code.
billingCyclebillingCycle ObjetObject Type de cycle de facturation défini pour la période actuelle.The type of billing cycle set for the current period.
participantsparticipants Liste de paires de chaînes d’objetsList of Object String pairs Collection de partenaire sur l’enregistrement (MPNID) sur l’achat.A collection of PartnerId on Record (MPNID) on the purchase.
provisioningContextprovisioningContext Dictionary<String, String>Dictionary<string, string> Contexte utilisé pour l’approvisionnement de l’offre.A context used for provisioning of offer.
orderGrouporderGroup stringstring Groupe pour indiquer les éléments qui peuvent être placés ensemble.A group to indicate which items can be placed together.
addonItemsaddonItems Liste d’objets CartLineItemList of CartLineItem objects Collection d’éléments de ligne de panier pour les modules complémentaires qui seront achetés vers l’abonnement de base qui résulte de l’achat de l’élément de ligne de panier parent.A collection of cart line items for add-ons that will be purchased towards the base subscription that results from the parent cart line item's purchase.
errorerror ObjetObject Appliqué après la création du panier en cas d’erreur.Applied after cart is created in case of an error.

Exemple de requête (nouvel abonnement de base)Request example (new base subscription)

L’exemple REST suivant montre comment créer un panier avec des éléments de module complémentaire pour un nouvel abonnement de base.The following REST example shows how to create a cart with add-on items for a new base subscription.

POST https://api.partnercenter.microsoft.com/v1/customers/18ac2950-8ea9-4dfc-92a4-ff4d4cd57796/carts HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: f931348a-6312-47d0-a8dd-31a386dedb8f
MS-CorrelationId: f73baf70-bbc3-43d0-8b29-dffa08ff9511

{
    "LineItems": [
        {
            "Id":0,
            "CatalogItemId":"91FD106F-4B2C-4938-95AC-F54F74E9A239",
            "FriendlyName":"Myofferpurchase",
            "Quantity":3,
            "BillingCycle":"monthly",
            "AddonItems": [
                {
                    "Id":1,
                    "CatalogItemId":"C94271D8-B431-4A25-A3C5-A57737A1C909",
                    "Quantity":2,
                    "BillingCycle":"monthly"
                },
                {
                    "Id":2,
                    "CatalogItemId":"43FCE491-76D1-4BCC-B709-8A288786DBAE",
                    "Quantity":3,
                    "BillingCycle":"monthly"
                }
            ]
        }
    ]
}

Exemple de demande (abonnement de base existant)Request example (existing base subscription)

L’exemple REST suivant montre comment ajouter des modules complémentaires à un abonnement de base existant.The following REST example show how to append add-ons to an existing base subscription.

POST https://api.partnercenter.microsoft.com/v1/customers/18ac2950-8ea9-4dfc-92a4-ff4d4cd57796/carts HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 512a777a-5427-452d-9637-18421387e435
MS-CorrelationId: 182474ba-7303-4d0f-870a-8c7fba5ccc4b

{
    "LineItems": [
        {
            "Id":0,
            "CatalogItemId":"C94271D8-B431-4A25-A3C5-A57737A1C909",
            "Quantity":1,
            "BillingCycle":"annual",
            "ProvisioningContext":{"ParentSubscriptionId":"97555B61-7461-477A-A98C-9C76148783E4"}
        }
    ]
}

Réponse RESTREST response

En cas de réussite, cette méthode retourne la ressource Cart remplie dans le corps de la réponse.If successful, this method returns the populated Cart resource in the response body.

Codes d’erreur et de réussite de la réponseResponse success and error codes

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.Each response comes with an HTTP status code that indicates success or failure and additional debugging information. Utilisez un outil de trace réseau pour lire ce code, le type d’erreur et des paramètres supplémentaires.Use a network trace tool to read this code, error type, and additional parameters. Pour obtenir la liste complète, consultez Codes d’erreur.For the full list, see Error Codes.

Exemple de réponse (nouvel abonnement de base)Response example (new base subscription)

HTTP/1.1 201 Created
Content-Length: 958
Content-Type: application/json
MS-CorrelationId: f73baf70-bbc3-43d0-8b29-dffa08ff9511
MS-RequestId: f931348a-6312-47d0-a8dd-31a386dedb8f
X-Locale: en-US,en-US
Date: Thu, 01 Nov 2018 22:29:05 GMT

{
    "id":"dbe2f8d4-f21d-43e2-9356-cff6387c4ba1",
    "creationTimestamp":"2018-11-01T22:29:03.6900182Z",
    "lastModifiedTimestamp":"2018-11-01T22:29:03.6900182Z",
    "expirationTimestamp":"2018-11-01T22:44:05.0025799Z",
    "lastModifiedUser":"1824b7fc-2fac-4478-b177-66823c40ab75",
    "status":"Active",
    "lineItems": [
        {
            "id":0,
            "catalogItemId":"91FD106F-4B2C-4938-95AC-F54F74E9A239",
            "friendlyName":"Myofferpurchase",
            "quantity":3,
            "currencyCode":"USD",
            "billingCycle":"monthly",
            "orderGroup":"OMS-0",
            "addonItems": [
                {
                    "id":1,
                    "catalogItemId":"C94271D8-B431-4A25-A3C5-A57737A1C909",
                    "quantity":2,
                    "currencyCode":"USD",
                    "billingCycle":"monthly",
                    "orderGroup":"OMS-0"
                },
                {
                    "id":2,
                    "catalogItemId":"43FCE491-76D1-4BCC-B709-8A288786DBAE",
                    "quantity":3,
                    "currencyCode":"USD",
                    "billingCycle":"monthly",
                    "orderGroup":"OMS-0"
                }
            ]
        }
],
    "links": {
        "self": {
            "uri":"/customers/18ac2950-8ea9-4dfc-92a4-ff4d4cd57796/carts/dbe2f8d4-f21d-43e2-9356-cff6387c4ba1",
            "method":"GET",
            "headers":[
            ]
        }
    },
    "attributes": {
        "objectType":"Cart"
    }
}

Exemple de réponse (abonnement de base existant)Response example (existing base subscription)

HTTP/1.1 201 Created
Content-Length: 707
Content-Type: application/json
MS-CorrelationId: 182474ba-7303-4d0f-870a-8c7fba5ccc4b
MS-RequestId: 512a777a-5427-452d-9637-18421387e435
X-Locale: en-US,en-US
Date: Thu, 01 Nov 2018 22:46:18 GMT

{
    "id":"4d927e27-93d1-448b-abe5-819b66ecca22",
    "creationTimestamp":"2018-11-01T22:46:16.2996364Z",
    "lastModifiedTimestamp":"2018-11-01T22:46:16.2996364Z",
    "expirationTimestamp":"2018-11-01T23:01:18.7543264Z",
    "lastModifiedUser":"1824b7fc-2fac-4478-b177-66823c40ab75",
    "status":"Active",
    "lineItems": [
        {
            "id":0,
            "catalogItemId":"C94271D8-B431-4A25-A3C5-A57737A1C909",
            "quantity":1,
            "currencyCode":"USD",
            "billingCycle":"annual",
            "provisioningContext": {
                "parentSubscriptionId":"97555B61-7461-477A-A98C-9C76148783E4"
            },
            "orderGroup":"OMS-0"
        }
    ],
    "links": {
        "self": {
            "uri":"/customers/18ac2950-8ea9-4dfc-92a4-ff4d4cd57796/carts/4d927e27-93d1-448b-abe5-819b66ecca22",
            "method":"GET",
            "headers":[
            ]
        }
    },
    "attributes": {
        "objectType":"Cart"
    }
}