Créer une commande pour un client d’un revendeur indirect
Comment créer une commande pour un client d’un revendeur indirect.
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 de l’application et de l’utilisateur uniquement.
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 de l’offre à acheter.
Identificateur du locataire du revendeur indirect.
C#
Pour créer une commande pour un client d’un revendeur indirect :
Obtenez une collection des revendeurs indirects qui ont une relation avec le partenaire connecté.
Obtenez une variable locale pour l’élément de la collection qui correspond à l’ID de revendeur indirect. Cette étape vous aide à accéder à la propriété MpnId du revendeur lorsque vous créez la commande.
Instanciez un objet Order et définissez la propriété ReferenceCustomerID sur l’identificateur du client afin d’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. Veillez à remplir la propriété PartnerIdOnRecord dans chaque élément de ligne avec l’ID partenaire du revendeur indirect. Vous devez disposer d’au moins un élément de ligne de commande.
Obtenez une interface pour les opérations de commande en appelant la méthode IAggregatePartner.Customers.ById avec l’ID client pour identifier le client, puis récupérez l’interface à partir de la propriété Orders.
Appelez la méthode Create ou CreateAsync pour créer l’ordre.
Exemple en code C#
// IAggregatePartner partnerOperations;
// string customerId;
// string offerId;
// string indirectResellerId;
// Get the indirect resellers with a relationship to the signed-in partner.
var indirectResellers = partnerOperations.Relationships.Get(PartnerRelationshipType.IsIndirectCloudSolutionProviderOf);
// Find the matching reseller in the collection.
var selectedIndirectReseller = (indirectResellers != null && indirectResellers.Items.Any()) ?
indirectResellers.Items.FirstOrDefault(reseller => reseller.Id.Equals(indirectResellerId, StringComparison.OrdinalIgnoreCase)) :
null;
// Prepare the order and populate the PartnerIdOnRecord with the reseller's Partner Id.
var order = new Order()
{
ReferenceCustomerId = customerId,
LineItems = new List<OrderLineItem>()
{
new OrderLineItem()
{
OfferId = offerId,
FriendlyName = "New offer purchase.",
Quantity = 5,
PartnerIdOnRecord = selectedIndirectReseller != null ? selectedIndirectReseller.MpnId : null
}
}
};
// Place the order.
var createdOrder = partnerOperations.Customers.ById(customerId).Orders.Create(order);
Exemple : Projet d’application de test console : Classe d’exemples sdk de l’Espace partenaires : PlaceOrderForCustomer.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 | Chaîne 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.
Nom | Type | Requise | Description |
---|---|---|---|
id | string | Non | Identificateur de commande fourni lors de la création réussie de l’ordre. |
referenceCustomerId | string | Oui | L’identificateur du client. |
billingCycle | string | Non | Fréquence à laquelle le partenaire est facturé pour cette commande. La valeur par défaut est « Mensuelle » et est appliquée lors de la création réussie de l’ordre. Les valeurs prises en charge sont les noms des membres trouvés dans BillingCycleType. Remarque : la fonctionnalité de facturation annuelle n’est pas encore en disponibilité générale. La prise en charge de la facturation annuelle sera bientôt disponible. |
lineItems | tableau d’objets | Oui | Tableau des ressources OrderLineItem. |
creationDate | string | Non | Date à laquelle la commande a été créée, au format date/heure. Appliqué lors de la création réussie de l’ordre. |
attributs | object | Non | Contient « ObjectType » : « Order » |
OrderLineItem
Ce tableau décrit les propriétés OrderLineItem dans le corps de la requête.
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. |
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. |
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. L’échec de la fourniture de l’ID partenaire du revendeur n’entraîne pas l’échec de l’ordre. Toutefois, le revendeur n’est pas enregistré et, par conséquent, les calculs incitatives peuvent ne pas inclure la vente. |
attributs | object | Non | Contient « ObjectType » :"OrderLineItem ». |
Exemple de requête
POST https://api.partnercenter.microsoft.com/v1/customers/c501c3c4-d776-40ef-9ecf-9cefb59442c1/orders HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 02109f46-3ff2-4be4-9f37-b2eb6d58d542
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
X-Locale: en-US
Content-Type: application/json
Host: api.partnercenter.microsoft.com
Content-Length: 410
Expect: 100-continue
{
"Id": null,
"ReferenceCustomerId": "c501c3c4-d776-40ef-9ecf-9cefb59442c1",
"BillingCycle": "unknown",
"LineItems": [{
"LineItemNumber": 0,
"OfferId": "DB2E705F-B82A-4024-A3D5-D88E12F2DB35",
"SubscriptionId": null,
"ParentSubscriptionId": null,
"FriendlyName": "New offer purchase.",
"Quantity": 5,
"PartnerIdOnRecord": "4847383",
"Attributes": {
"ObjectType": "OrderLineItem"
}
}
],
"CreationDate": null,
"Attributes": {
"ObjectType": "Order"
}
}
Réponse REST
Si elle réussit, le corps de la réponse contient la ressource Order renseignée.
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: 831
Content-Type: application/json; charset=utf-8
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
MS-RequestId: 02109f46-3ff2-4be4-9f37-b2eb6d58d542
MS-CV: Nd3Oum/L5EywtKQK.0
MS-ServerId: 020021921
Date: Mon, 10 Apr 2017 23:02:24 GMT
{
"id": "3eddcac6-63b2-4c40-b0b6-f47e18301492",
"referenceCustomerId": "c501c3c4-d776-40ef-9ecf-9cefb59442c1",
"billingCycle": "monthly",
"lineItems": [{
"lineItemNumber": 0,
"offerId": "DB2E705F-B82A-4024-A3D5-D88E12F2DB35",
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"friendlyName": "New offer purchase.",
"quantity": 5,
"partnerIdOnRecord": "4847383",
"links": {
"subscription": {
"uri": "/customers/c501c3c4-d776-40ef-9ecf-9cefb59442c1/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"method": "GET",
"headers": []
}
}
}
],
"creationDate": "2017-04-10T16:02:25.983-07:00",
"links": {
"self": {
"uri": "/customers/c501c3c4-d776-40ef-9ecf-9cefb59442c1/orders/3eddcac6-63b2-4c40-b0b6-f47e18301492",
"method": "GET",
"headers": []
}
},
"attributes": {
"etag": "eyJpZCI6IjNlZGRjYWM2LTYzYjItNGM0MC1iMGI2LWY0N2UxODMwMTQ5MiIsInZlcnNpb24iOjF9",
"objectType": "Order"
}
}