Créer un panier avec des modules complémentaires à une commande client
Vous pouvez acheter des modules complémentaires via un panier. Pour plus d’informations sur ce qui est actuellement disponible pour la vente, consultez les offres partenaires dans le programme fournisseur de solutions Cloud.
Remarque
Les nouvelles expériences commerciales pour les services basés sur des licences incluent de nombreuses nouvelles fonctionnalités et sont disponibles pour tous les Fournisseur de solutions Cloud (CSP). Pour plus d’informations, consultez la Vue d’ensemble des nouvelles expériences commerciales.
Les nouveaux paniers de commerce avec des modules complémentaires sont différents des offres traditionnelles basées sur des licences. Les nouveaux modules complémentaires commerciaux sont achetés de la même façon que les offres de base, ils n’utilisent pas la propriété addonItems . Cette rubrique inclut des exemples de demande et de réponse spécifiquement pour une nouvelle référence SKU de produit basée sur le commerce avec une référence SKU de produit complémentaire.
Remarque
Les paniers expirent 7 jours après la création initiale.
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 du 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
).
C#
Un panier permet l’achat d’une offre de base et de ses modules complémentaires correspondants. Procédez comme suit pour créer un panier :
Instanciez un objet Cart.
Créez une liste d’objets CartLineItem qui représentent les offres de base et affectez la liste à la propriété LineItems du panier.
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é sur cette offre de base.
Obtenez une interface pour les opérations de panier à l’aide d’IAggregatePartner pour appeler la méthode ICustomerCollection.ById avec l’ID client pour identifier le client, puis récupérer l’interface à partir de la propriété Cart.
Enfin, appelez la méthode Create ou CreateAsync pour créer le panier.
Exemple en code C#
// 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 ces étapes pour créer un panier qui permet l’achat de modules complémentaires sur des abonnements de base existants :
Créez un panier avec un nouveau CartLineItem contenant l’ID d’abonnement dans la propriété ProvisioningContext avec la clé « ParentSubscriptionId ».
Appelez la méthode Create ou CreateAsync .
// 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 REST
Syntaxe de la requête
Méthode | URI de demande |
---|---|
POST | {baseURL}/v1/customers/{customer-id}/carts HTTP/1.1 |
Paramètre 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
Ce tableau décrit les propriétés cart dans le corps de la requête.
Propriété | Type | Requise | Description |
---|---|---|---|
id | string | Non | Identificateur de panier fourni lors de la création réussie du panier. |
creationTimeStamp | Date/Heure | Non | Date de création du panier, au format date-heure. Appliqué lors de la création réussie du panier. |
lastModifiedTimeStamp | Date/Heure | Non | Date de la dernière mise à jour du panier, au format date-heure. Appliqué lors de la création réussie du panier. |
expirationTimeStamp | Date/Heure | Non | Date d’expiration du panier, au format date-heure. Appliqué lors de la création réussie du panier. |
lastModifiedUser | string | Non | Utilisateur qui a mis à jour le panier pour la dernière fois. Appliqué lors de la création réussie du panier. |
lineItems | Tableau d’objets | Oui | Tableau de ressources CartLineItem . |
Ce tableau décrit les propriétés CartLineItem dans le corps de la requête.
Propriété | Type | Description |
---|---|---|
id | string | Identificateur unique d’un élément de ligne de panier. Appliqué lors de la création réussie du panier. |
catalogId | string | Identificateur de l’élément de catalogue. |
friendlyName | string | facultatif. Nom convivial de l’élément défini par le partenaire pour aider à lever l’ambiguïté. |
quantité | int | Nombre de licences ou d’instances. |
currencyCode | string | Code devise. |
billingCycle | Object | Type de cycle de facturation défini pour la période actuelle. |
participants | Liste des paires de chaînes d’objet | Collection partnerId on Record (PartnerID) sur l’achat. |
provisioningContext | Chaîne de<dictionnaire, chaîne> | Contexte utilisé pour l’approvisionnement de l’offre. |
orderGroup | string | Groupe pour indiquer quels éléments peuvent être placés ensemble. |
addonItems | Liste des objets CartLineItem | 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. Cette propriété est uniquement destinée aux paniers basés sur des licences traditionnelles, les nouvelles licences commerciales incluent des modules complémentaires en tant qu’offres basées sur des licences. Les éléments new-commerce n’utilisent pas cette propriété addonItems . |
error | Object | Appliqué après la création du panier en cas d’erreur. |
Exemple de demande (nouvel abonnement de base) pour les licences traditionnelles
L’exemple REST suivant montre comment créer un panier avec des éléments complémentaires pour un nouvel abonnement de base.
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 (nouvel abonnement de base) pour un nouveau panier commercial pour une offre de base avec un module complémentaire
{
"LineItems": [
{
"Id": 0,
"CatalogItemId":"CFQ7TTC0LFLX:0001:CFQ7TTC0LB30", - Base
"Quantity": 20,
"BillingCycle": "Monthly",
"TermDuration": "P1M"
},
{
"Id": 1,
"CatalogItemId":"CFQ7TTC0HDJX:0001:CFQ7TTC0K806", - Add on
"Quantity": 20,
"BillingCycle": "Monthly",
"TermDuration": "P1M"
}
]
}
Exemple de demande (abonnement de base existant) pour les licences traditionnelles
L’exemple REST suivant montre comment ajouter des modules complémentaires à un abonnement de base existant. Cet exemple s’applique uniquement aux licences traditionnelles, et non aux nouveaux commerces.
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 REST
Si elle réussit, cette méthode retourne la ressource Cart remplie dans le corps de la réponse.
Codes d’erreur et de réussite de la réponse
Chaque réponse est fournie avec un code d’état HTTP qui indique la réussite ou l’échec et plus d’informations de débogage. Utilisez un outil de suivi réseau pour lire ce code, le type d’erreur et d’autres paramètres. Pour obtenir la liste complète, consultez Codes d’erreur.
Exemple de réponse (nouvel abonnement de base) pour les licences traditionnelles
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) pour les licences traditionnelles
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"
}
}
Exemple de réponse pour une nouvelle offre de base basée sur une licence commerciale et un module complémentaire
{
"id": "ea37ea81-efaf-4113-9785-e1c266aea2ed",
"creationTimestamp": "2022-02-10T16:04:22.4908435Z",
"lastModifiedTimestamp": "2022-02-10T16:04:22.4908444Z",
"expirationTimestamp": "2022-02-17T16:04:26.3085755Z",
"lastModifiedUser": "a7155e79-65e3-42b0-a62a-a41297979782",
"status": "Active",
"lineItems": [
{
"id": 0,
"catalogItemId": "CFQ7TTC0LFLX:0001:CFQ7TTC0LB30", - Base
"quantity": 20,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1M",
"promotionId": "39NFJQT1PHSN:0008:39NFJQT1Q5J0",
"provisioningContext": {},
"orderGroup": "0"
},
{
"id": 1,
"catalogItemId": "CFQ7TTC0HDJX:0001:CFQ7TTC0K806", - Add on
"quantity": 20,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1M",
"provisioningContext": {},
"orderGroup": "0"
}
],
"links": {
"self": {
"uri": "/customers/3a15e1df-b095-41d4-9029-27a5974c2458/carts/ea37ea81-efaf-4113-9785-e1c266aea2ed",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Cart"
}
}
Commentaires
https://aka.ms/ContentUserFeedback.
Prochainement : Tout au long de l'année 2024, nous supprimerons progressivement les GitHub Issues en tant que mécanisme de retour d'information pour le contenu et nous les remplacerons par un nouveau système de retour d'information. Pour plus d’informations, voir:Soumettre et afficher des commentaires pour