Erstellen einer Bestellung für einen Kunden mithilfe von Partner Center-APIs
Gilt für: Partner Center | Partner Center-Betrieb durch 21Vianet | Partner Center für Microsoft Cloud for US Government
Das Erstellen einer Bestellung für azure reservierte VM-Instanzprodukte gilt nur für:
- Partner Center
Informationen dazu, was derzeit zum Verkauf verfügbar ist, finden Sie unter Partnerangebote im Cloud Solution Provider-Programm.
Voraussetzungen
Anmeldeinformationen, wie unter Partner Center-Authentifizierung beschrieben. Dieses Szenario unterstützt die Authentifizierung mit eigenständigen App- und App+Benutzeranmeldeinformationen.
Eine Kunden-ID (
customer-tenant-id
). Wenn Sie die KUNDEN-ID nicht kennen, können Sie sie im Partner Center nachschlagen, indem Sie den Arbeitsbereich "Kunden " und dann den Kunden aus der Kundenliste und dann "Konto" auswählen. Suchen Sie auf der Seite "Konto" des Kunden im Abschnitt "Kundenkontoinformationen" nach der Microsoft-ID. Die Microsoft-ID entspricht der Kunden-ID (customer-tenant-id
).Ein Angebotsbezeichner.
C#
So erstellen Sie einen Auftrag für einen Kunden:
Instanziieren Sie ein Order-Objekt, und legen Sie die ReferenceCustomerID-Eigenschaft auf die Kunden-ID fest, um den Kunden aufzuzeichnen.
Erstellen Sie eine Liste von OrderLineItem-Objekten, und weisen Sie die Liste der LineItems-Eigenschaft der Bestellung zu. Jede Auftragsposition enthält die Kaufinformationen für ein Angebot. Es muss mindestens eine Auftragsposition vorhanden sein.
Rufen Sie eine Schnittstelle zum Bestellen von Vorgängen ab. Rufen Sie zunächst die IAggregatePartner.Customers.ById-Methode mit der Kunden-ID auf, um den Kunden zu identifizieren. Rufen Sie als Nächstes die Schnittstelle aus der Orders-Eigenschaft ab.
Rufen Sie die Create- oder CreateAsync-Methode auf, und übergeben Sie das Order-Objekt.
Um den Nachweis abzuschließen und weitere Wiederverkäufer einzuschließen, lesen Sie die folgenden Beispielbeispiele für Anforderungs- und Antwortbeispiele:
Anforderungsbeispiel
{
"PartnerOnRecordAttestationAccepted":true,
"lineItems": [
{
"offerId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
"quantity": 1,
"lineItemNumber": 0,
"PartnerIdOnRecord": "873452",
"AdditionalPartnerIdsOnRecord":["4847383","873452"]
}
],
"billingCycle": "monthly"
}
Beispielantwort
{
"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);
Beispiel: Konsolentest-App. Projekt: Partner Center SDK Samples Class: CreateOrder.cs
REST-Anforderung
Anforderungssyntax
Methode | Anforderungs-URI |
---|---|
POST | {baseURL}/v1/customers/{customer-id}/orders HTTP/1.1 |
URI-Parameter
Verwenden Sie zum Identifizieren des Kunden die folgenden Pfadparameter:
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
Kunden-ID | Zeichenfolge | Ja | Eine guid formatierte Kunden-ID, die den Kunden identifiziert. |
Anforderungsheader
Weitere Informationen finden Sie unter Partner Center-REST-Header.
Anforderungstext
Auftrag
In dieser Tabelle werden die Order-Eigenschaften im Anforderungstext beschrieben.
Eigenschaft | Type | Erforderlich | Beschreibung |
---|---|---|---|
id | Zeichenfolge | No | Ein Auftragsbezeichner, der bei erfolgreicher Erstellung der Bestellung angegeben wird. |
referenceCustomerId | Zeichenfolge | No | Der Kundenbezeichner. |
billingCycle | Zeichenfolge | No | Gibt die Häufigkeit an, mit der der Partner für diese Bestellung in Rechnung gestellt wird. Die unterstützten Werte sind die in BillingCycleType angegebenen Elementnamen. Der Standardwert ist "Monatlich" oder "OneTime" bei der Auftragserstellung. Dieses Feld wird auf erfolgreiche Erstellung der Bestellung angewendet. |
lineItems | Array von OrderLineItem-Ressourcen | Ja | Eine artikelisierte Liste der Angebote, die der Kunde kauft, einschließlich der Menge. |
currencyCode | Zeichenfolge | No | Schreibgeschützt. Die Währung, die beim Aufgeben der Bestellung verwendet wird. Angewendet auf erfolgreiche Erstellung der Bestellung. |
creationDate | datetime | No | Schreibgeschützt. Das Datum, an dem der Auftrag erstellt wurde, im Format Datum/Uhrzeit. Angewendet auf erfolgreiche Erstellung der Bestellung. |
status | Zeichenfolge | No | Schreibgeschützt. Der Status der Bestellung. Unterstützte Werte sind die Membernamen, die in OrderStatus gefunden werden. |
Verknüpfungen | OrderLinks | No | Die Ressourcenverknüpfung, die der Bestellung entspricht. |
Attributen | ResourceAttributes | No | Die Metadatenattribute, die der Order entsprechen. |
PartnerOnRecordAttestationAccepted | Boolean | Ja | Bestätigt den Abschluss des Nachweises. |
OrderLineItem
In dieser Tabelle werden die OrderLineItem-Eigenschaften im Anforderungstext beschrieben.
Hinweis
PartnerIdOnRecord sollte nur bereitgestellt werden, wenn ein indirekter Anbieter im Auftrag eines indirekten Wiederverkäufers eine Bestellung abordnet. Es wird verwendet, um die PartnerID des indirekten Händlers nur zu speichern (niemals die ID des indirekten Anbieters).
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
lineItemNumber | int | Ja | Jeder Position in der Sammlung wird eine eindeutige Zeilennummer zugewiesen, von 0 bis Anzahl–1. |
offerId | Zeichenfolge | Ja | Die Angebots-ID Stellen Sie sicher, dass die Verfügbarkeit des Angebots für das richtige Segment gilt. |
subscriptionId | Zeichenfolge | No | Die Abonnement-ID. |
parentSubscriptionId | Zeichenfolge | No | Optional. Die ID des übergeordneten Abonnements in einem Add-On-Angebot. Gilt nur für PATCH. |
friendlyName | Zeichenfolge | No | Optional. Der Anzeigename für das vom Partner definierte Abonnement, um mehrdeutig zu sein. |
Menge | int | Ja | Die Anzahl der Lizenzen für ein lizenzbasiertes Abonnement. |
customTermEndDate | DateTime | No | Das Enddatum der ersten Abrechnungsdauer des neuen Abonnements. |
partnerIdOnRecord | Zeichenfolge | No | Wenn ein indirekter Anbieter eine Bestellung im Auftrag eines indirekten Vertriebspartners abordnet, füllen Sie dieses Feld nur mit der PartnerID des indirekten Vertriebspartners auf (niemals die ID des indirekten Anbieters). Dadurch wird sichergestellt, dass Incentives ordnungsgemäß abgerechnet werden. |
provisioningContext | Wörterbuchzeichenfolge<, Zeichenfolge> | No | Informationen, die für die Bereitstellung einiger Elemente im Katalog erforderlich sind. Die provisioningVariables-Eigenschaft in einer SKU gibt an, welche Eigenschaften für bestimmte Elemente im Katalog erforderlich sind. |
Verknüpfungen | OrderLineItemLinks | No | Schreibgeschützt. Die Ressourcenverknüpfung, die dem Auftragspositionsartikel entspricht. |
Attributen | ResourceAttributes | No | Die Metadatenattribute, die dem OrderLineItem-Objekt entsprechen. |
renewsTo | Array aus Objekten | No | Ein Array von RenewsTo-Ressourcen . |
AttestationAccepted | bool | No | Gibt die Vereinbarung zum Anbieten oder SKU-Bedingungen an. Nur für Angebote oder Skus erforderlich, bei denen SkuAttestationProperties oder OfferAttestationProperties enforceAttestation True ist. |
AdditionalPartnerIdsOnRecord | String | No | Wenn ein indirekter Anbieter eine Bestellung im Auftrag eines indirekten Vertriebspartners abordnet, füllen Sie dieses Feld nur mit der PartnerID des zusätzlichen indirekten Vertriebspartners auf (niemals die ID des indirekten Anbieters). Anreize gelten nicht für diese zusätzlichen Wiederverkäufer. Es können nur maximal 5 indirekte Wiederverkäufer eingegeben werden. Dies gilt nur für Partner, die innerhalb der EU/EFTA-Länder/Regionen transaktionen. |
RenewsTo
In dieser Tabelle werden die RenewsTo-Eigenschaften im Anforderungstext beschrieben.
Eigenschaft | Type | Erforderlich | Beschreibung |
---|---|---|---|
termDuration | Zeichenfolge | No | Eine ISO 8601-Darstellung der Dauer der Verlängerung. Die aktuellen unterstützten Werte sind P1M (1 Monat) und P1Y (1 Jahr). |
Anforderungsbeispiel
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
}
]
}
REST-Antwort
Bei erfolgreicher Ausführung gibt die Methode eine Order-Ressource im Antworttext zurück.
Wenn die Bestellung mindestens ein Abonnement enthält, werden die entsprechenden Abonnement-ID-Werte nur in der REST-Antwort angezeigt, wenn die entsprechenden Abonnements zum Zeitpunkt des API-Aufrufs bereitgestellt wurden. Bereitstellungsabonnements treten asynchron auf und daher sind die Abonnement-ID-Werte möglicherweise nicht immer in der REST-Antwort des Create Order-Aufrufs sichtbar. Sobald jedoch die jeweiligen Abonnements bereitgestellt wurden, können ihre Abonnement-ID-Werte über Get Orders und Get Order by ID API-Aufrufe aufgerufen werden.
Erfolgs- und Fehlercodes der Antwort
Jede Antwort enthält einen HTTP-Statuscode, der Aufschluss darüber gibt, ob der Vorgang erfolgreich war, sowie ggf. zusätzliche Debuginformationen. Verwende ein Tool für die Netzwerkablaufverfolgung, um diesen Code, den Fehlertyp und zusätzliche Parameter zu lesen. Die vollständige Liste finden Sie unter Partner Center-Fehlercodes.
Beispielantwort
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"
}
}