Créer un panier avec une commande client
S’applique à : Espace partenaires | Espace partenaires géré par 21Vianet | Espace partenaires de Microsoft Cloud for US Government
Vous pouvez ajouter une commande pour un client dans 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 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#
Pour créer une commande pour un client :
Instanciez un objet Cart.
Créez une liste d’objets CartLineItem et affectez la liste à la propriété LineItems du panier. Chaque article de ligne de panier contient les informations d’achat d’un produit. Vous devez disposer d’au moins un élément de ligne de panier.
Obtenez une interface pour les opérations de panier en appelant la méthode IAggregatePartner.Customers.ById avec l’ID client pour identifier le client, puis en récupérant l’interface à partir de la propriété Cart .
Appelez la méthode Create ou CreateAsync pour créer le panier.
Pour effectuer l’attestation et inclure d’autres revendeurs, consultez l’exemple suivant d’exemples de demande et de réponse :
Exemple de requête
{
"PartnerOnRecordAttestationAccepted":true, "lineItems": [
{
"id": 0,
"catalogItemId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
"quantity": 1,
"billingCycle": "monthly",
"termDuration": "P1M",
"renewsTo": null,
"provisioningContext": {},
"customTermEndDate": "2022-02-19T00:00:00Z"
},
{
"id": 1,
"catalogItemId": "CFQ7TTC0LFLS:0002:CFQ7TTC0KDLJ",
"quantity": 2,
"billingCycle": "monthly",
"termDuration": "P1Y",
"participants": [
{
"key": "transaction_reseller",
"value": "5357564"
},
{
"key": "additional_transaction_reseller",
"value": "517285"
},
{
"key": "additional_transaction_reseller",
"value": "5357563"
}
]
}
]
}
Exemple de réponse
{
"id": "3e22b548-647d-4223-9675-1fcb6cb57665",
"creationTimestamp": "2021-08-18T17:29:52.3517492Z",
"lastModifiedTimestamp": "2021-08-18T17:29:52.3517553Z",
"expirationTimestamp": "2021-08-25T17:30:11.2406416Z",
"lastModifiedUser": "da62a0dc-35e9-4601-b48e-a047bd3ec7c1",
"status": "Active",
"lineItems": [
{
"id": 0,
"catalogItemId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1M",
"customTermEndDate": "2022-02-19T00:00:00Z";
"provisioningContext": {},
"orderGroup": "0"
},
{
"id": 1,
"catalogItemId": "CFQ7TTC0LFLS:0002:CFQ7TTC0KDLJ",
"quantity": 2,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1Y",
"participants": [
{
"key": "transaction_reseller",
"value": "5357564"
},
{
"key": "additional_transaction_reseller",
"value": "517285"
},
{
"key": "additional_transaction_reseller",
"value": "5357563"
}
],
"provisioningContext": {},
"orderGroup": "0"
}
],
"links": {
"self": {
"uri": "/customers/f81d98dd-c2f4-499e-a194-5619e260344e/carts/3e22b548-647d-4223-9675-1fcb6cb57665",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Cart"
}
}
Exemple C#
// IAggregatePartner partnerOperations;
// string customerId;
// string subscriptionId;
var cart = new Cart()
{
LineItems = new List<CartLineItem>()
{
new CartLineItem()
{
/* Microsoft Azure Subscription */
Id = 0,
CatalogItemId = "MS-AZR-0145P",
Quantity = 1,
BillingCycle = BillingCycleType.Monthly,
TermDuration = "P1Y"
},
new CartLineItem()
{
/* Azure Reserved Instance */
Id = 1,
CatalogItemId = "DZH318Z0BQ36:004G:DZH318Z08C0S",
Quantity = 1,
BillingCycle = BillingCycleType.OneTime,
TermDuration = "P1Y",
ProvisioningContext = new Dictionary<string, string>
{
{ "subscriptionId", subscriptionId },
{ "scope", "shared" }
}
},
new CartLineItem()
{
/* Azure Reserved Instance */
Id = 2,
CatalogItemId = "DZH318Z0BQ36:004J:DZH318Z08B8X",
Quantity = 1,
BillingCycle = BillingCycleType.OneTime,
TermDuration = "P3Y",
ProvisioningContext = new Dictionary<string, string>
{
{ "subscriptionId", subscriptionId },
{ "scope", "shared" }
}
},
new CartLineItem()
{
/* Perpetual Software */
Id = 3,
CatalogItemId = "DG7GMGF0DWM3:0002:DG7GMGF0DT1M",
Quantity = 1,
BillingCycle = BillingCycleType.OneTime
},
new CartLineItem()
{
/* SaaS */
Id = 4,
CatalogItemId = "DZH318Z0BXWC:0002:DZH318Z0BMRV",
Quantity = 1,
BillingCycle = BillingCycleType.Monthly,
TermDuration = "P1M"
},
new CartLineItem()
{
/* SaaS Free Trial */
Id = 5,
CatalogItemId = "DZH318Z0C0WF:0001:DZH318Z0BP69",
Quantity = 10,
BillingCycle = BillingCycleType.None,
TermDuration = "P1M",
RenewsTo = new RenewsTo
{
TermDuration = "P1Y"
}
}
}
};
cart = partnerOperations.Customers.ById(customerId).Carts.Create(cart);
Java
Le Kit de développement logiciel (SDK) Java de l’Espace partenaires peut être utilisé pour gérer les ressources de l’Espace partenaires. Il s’agit d’un projet open source géré par la communauté partenaire et non officiellement pris en charge par Microsoft. Si vous rencontrez un problème, vous pouvez obtenir de l’aide auprès de la communauté ou le signaler dans GitHub.
Pour créer une commande pour un client :
Instanciez un objet Cart.
Créez une liste d’objets CartLineItem et affectez la liste aux éléments de ligne du panier. Chaque article de ligne de panier contient les informations d’achat d’un produit. Vous devez disposer d’au moins un élément de ligne de panier.
Obtenez une interface pour les opérations de panier en appelant la fonction IAggregatePartner.getCustomers().byId avec l’ID client pour identifier le client, puis en récupérant l’interface à partir de la fonction getCart .
Appelez la fonction de création pour créer le panier.
Exemple Java
// IAggregatePartner partnerOperations;
// String customerId;
// String subscriptionId;
// String catalogItemId;
CartLineItem lineItem = new CartLineItem();
lineItem.setBillingCycle(BillingCycleType.OneTime);
lineItem.setCatalogItemId(catalogItemId);
lineItem.setFriendlyName("Sample RI Purchase");
lineItem.setQuantity(1);
Map<String, String> provisioningContext = new HashMap<String,String>();
provisioningContext.put("duration", "3Years");
provisioningContext.put("scope", "shared");
provisioningContext.put("subscriptionId", subscriptionId);
lineItem.setProvisioningContext(provisioningContext);
List<CartLineItem> lineItemList = new ArrayList<CartLineItem>();
lineItemList.add(lineItem);
Cart cart = new Cart();
cart.setLineItems(lineItemList);
Cart cartCreated = partnerOperations.getCustomers().byId(customerId).getCarts().create(cart);
PowerShell
Le module PowerShell de l’Espace partenaires peut être utilisé pour gérer les ressources de l’Espace partenaires. Il s’agit d’un projet open source géré par la communauté partenaire et non officiellement pris en charge par Microsoft. Si vous rencontrez un problème, vous pouvez obtenir de l’aide auprès de la communauté ou le signaler dans GitHub.
Pour créer une commande pour un client :
Instanciez un objet Cart.
Créez une liste d’objets CartLineItem et affectez la liste aux éléments de ligne du panier. Chaque article de ligne de panier contient les informations d’achat d’un produit. Vous devez disposer d’au moins un élément de ligne de panier.
Exécutez la commande New-PartnerCustomerCart pour créer le panier.
# $customerId
# $subscriptionId
# $catalogItemId
$lineItem = New-Object -TypeName Microsoft.Store.PartnerCenter.PowerShell.Models.Carts.PSCartLineItem
$lineItem.BillingCycle = 'OneTime'
$lineItem.CatalogItemId = $catalogItemId
$lineItem.FriendlyName = 'Sample RI Purchase'
$lineItem.ProvisioningContext.Add('duration', '1Year')
$lineItem.ProvisioningContext.Add('scope', 'shared')
$lineItem.ProvisioningContext.Add('subscriptionId', $subsciptionId)
$lineItem.Quantity = 10
New-PartnerCustomerCart -CustomerId $customerId -LineItems $lineItem
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 . |
PartnerOnRecordAttestationAccepted | Boolean | Oui | Confirme l’achèvement de l’attestation |
Ce tableau décrit les propriétés CartLineItem dans le corps de la requête.
Propriété | Type | Requise | Description |
---|---|---|---|
id | string | Non | Identificateur unique d’un élément de ligne de panier. Appliqué lors de la création réussie du panier. |
catalogId | string | Oui | Identificateur de l’élément de catalogue. Vérifiez que la disponibilité de l’élément de catalogue concerne le segment approprié. |
friendlyName | string | Non | facultatif. Nom convivial de l’élément défini par le partenaire pour aider à lever l’ambiguïté. |
promotionId | string | Non | facultatif. La plupart des promotions NCE s’appliquent automatiquement, mais pour les promotions facultatives (telles que Bridge to the Cloud 2) à appliquer à un élément de ligne de panier, les partenaires doivent inclure l’ID de promotion dans l’ajout à la demande de panier. |
quantité | int | Oui | Nombre de licences ou d’instances. |
currencyCode | string | Non | Code devise. |
billingCycle | Object | Oui | Type de cycle de facturation défini pour la période actuelle. |
customTermEndDate | Date/Heure | Non | Date de fin d’un abonnement existant auquel vous souhaitez coterminer le nouvel abonnement. |
participants | Liste des paires de chaînes d’objet | Non | Collection partnerId on Record (PartnerID) sur l’achat. |
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. |
orderGroup | string | Non | Groupe pour indiquer quels éléments peuvent être placés ensemble. |
error | Object | Non | Appliqué après la création du panier en cas d’erreur. |
renewsTo | Tableau d’objets | Non | Tableau de ressources RenewsTo . |
AttestationAccepted | Boolean | 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. |
transaction_reseller | 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 uniquement (jamais l’ID du fournisseur indirect). Cela garantit une comptabilité appropriée des incitations. |
additional_transaction_reseller | 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. |
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 /v1/customers/d6bf25b7-e0a8-4f2d-a31b-97b55cfc774d/carts HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 4fa6dad6-a89f-4875-8247-8294a10ae1cf
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
X-Locale: en-US
MS-PartnerCenter-Client: Partner Center .NET SDK
Content-Type: application/json
Host: api.partnercenter.microsoft.com
Content-Length: 496
Expect: 100-continue
{
"lineItems": [
{
/* Microsoft Azure Subscription */
"id": 0,
"catalogItemId": "MS-AZR-0145P",
"quantity": 1,
"billingCycle": "monthly",
"termDuration": "P1Y"
},
{
/* Azure Reserved Instance */
"id": 1,
"catalogItemId": "DZH318Z0BQ36:004G:DZH318Z08C0S",
"quantity": 1,
"billingCycle": "one_time",
"termDuration": "P1Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "shared"
}
},
{
/* Azure Reserved Instance */
"id": 2,
"catalogItemId": "DZH318Z0BQ36:004J:DZH318Z08B8X",
"quantity": 1,
"billingCycle": "one_time",
"termDuration": "P3Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "single"
}
},
{
/* Perpetual Software */
"id": 3,
"catalogItemId": "DG7GMGF0DWTL:0001:DG7GMGF0DSFM",
"quantity": 1,
"billingCycle": "one_time"
},
{
/* SaaS */
"id": 4,
"catalogItemId": "DZH318Z0BXWC:0002:DZH318Z0BMRV",
"quantity": 1,
"billingCycle": "monthly",
"termDuration": "P1M"
},
{
/* SaaS Free Trial */
"id": 5,
"catalogItemId": "DZH318Z0C0WF:0001:DZH318Z0BP69",
"quantity": 10,
"billingCycle": "none",
"termDuration": "P1M",
"renewsTo": {
"termDuration": "P1Y"
}
}
]
}
Important
Depuis juin 2023, la dernière version du Kit de développement logiciel (SDK) .NET de l’Espace partenaires version 3.4.0 est désormais archivée. Vous pouvez télécharger la version du SDK à partir de GitHub, ainsi qu’un fichier lisezmoi contenant des informations utiles.
Les partenaires sont encouragés à continuer à utiliser les API REST de l’Espace partenaires.
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 les 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
HTTP/1.1 201 Created
Content-Length: 764
Content-Type: application/json; charset=utf-8
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
MS-RequestId: 4fa6dad6-a89f-4875-8247-8294a10ae1cf
X-Locale: en-US,en-US
MS-CV: sF/wRa2ih0CzbABc.0
MS-ServerId: 000001
Date: Thu, 15 Mar 2018 17:15:01 GMT
{
"id": "3655b1a0-b1c9-4268-9824-577fdbc4d0be",
"creationTimestamp": "2019-01-16T00:45:41.6062996Z",
"lastModifiedTimestamp": "2019-01-16T00:45:41.6062996Z",
"expirationTimestamp": "2019-01-16T01:00:54.4188497Z",
"lastModifiedUser": "1824b7fc-2fac-4478-b177-66823c40ab75",
"status": "Active",
"lineItems": [
{
"id": 0,
"catalogItemId": "MS-AZR-0145P",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1Y",
"orderGroup": "OMS-0"
},
{
"id": 1,
"catalogItemId": "DZH318Z0BQ36:004G:DZH318Z08C0S",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "one_time",
"termDuration": "P1Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "shared"
},
"orderGroup": "0"
},
{
"id": 2,
"catalogItemId": "DZH318Z0BQ36:004J:DZH318Z08B8X",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "one_time",
"termDuration": "P3Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "shared"
},
"orderGroup": "0"
},
{
"id": 3,
"catalogItemId": "DG7GMGF0DWM3:0002:DG7GMGF0DT1M",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "one_time",
"orderGroup": "0"
},
{
"id": 4,
"catalogItemId": "DZH318Z0BXWC:0002:DZH318Z0BMRV",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1M",
"orderGroup": "1"
},
{
"id": 5,
"catalogItemId": "DZH318Z0C0WF:0001:DZH318Z0BP69",
"quantity": 10,
"currencyCode": "USD",
"billingCycle": "none",
"termDuration": "P1M",
"renewsTo": {
"termDuration": "P1Y"
},
"orderGroup": "2"
}
],
"links": {
"self": {
"uri": "/customers/28045616-f6b9-462f-9701-0d89b5e65c44/carts/3655b1a0-b1c9-4268-9824-577fdbc4d0be",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Cart"
}
}
Exemple pour les nouveaux services basés sur des licences commerciales
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.
Exemple de requête
POST /v1/customers/932c4101-dc08-461b-b4c1-75d80e905775/carts HTTP/1.1
Host: api.partnercenter.microsoft.com
Content-Type: application/json
Content-Length: 165
{
"LineItems": [
{
"CatalogItemId":"CFQ7TTC0LFLZ:0002:CFQ7TTC0K4TS",
"Quantity": 1,
"TermDuration": "P1M",
"BillingCycle": "Monthly"
}
]
}
Important
Les éléments de ligne logicielle perpétuelle et plan Azure ne prennent pas en charge la propriété termDuration. Évitez d’inclure cela lors de l’acuir de ces types d’éléments.
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 d’autres 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
{
"id": "2517c51b-58cd-4abe-87ed-3ab812401ab4",
"creationTimestamp": "2023-07-11T21:16:11.55149Z",
"lastModifiedTimestamp": "2023-07-11T21:16:11.5515713Z",
"expirationTimestamp": "2023-07-18T21:16:17.2480482Z",
"lastModifiedUser": "9db12087-fbc3-481c-8965-73d44ff88e27",
"status": "Active",
"lineItems": [
{
"id": 0,
"catalogItemId": "CFQ7TTC0LF8S:0001:CFQ7TTC0VZW5",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1Y",
"provisioningContext": {},
"orderGroup": "0",
"pricing": {
"listPrice": 30.4,
"discountedPrice": 30.4,
"proratedPrice": 30.4,
"price": 30.4,
"extendedPrice": 364.8
}
}
],
"links": {
"self": {
"uri": "/customers/ebd8b4c2-4069-46a8-bd70-123d6dec3e39/carts/2517c51b-58cd-4abe-87ed-3ab812401ab4",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Cart"
}
}