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:

  1. Instanziieren Sie ein Order-Objekt, und legen Sie die ReferenceCustomerID-Eigenschaft auf die Kunden-ID fest, um den Kunden aufzuzeichnen.

  2. 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.

  3. 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.

  4. Rufen Sie die Create- oder CreateAsync-Methode auf, und übergeben Sie das Order-Objekt.

  5. Um den Nachweis abzuschließen und weitere Wiederverkäufer einzuschließen, lesen Sie die folgenden Beispielbeispiele für Anforderungs- und Antwortbeispiele:

Beispiel für eine Anfrage

{
    "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": "fcddfa52-1da8-4529-d347-50ea51e1e7be",
            "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", "5198C069-3DAA-403A-8660-5BE11BFD12EE" },
                { "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 Nein Ein Auftragsbezeichner, der bei erfolgreicher Erstellung der Bestellung angegeben wird.
referenceCustomerId Zeichenfolge Nein Der Kundenbezeichner.
billingCycle Zeichenfolge Nein 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 Nein Schreibgeschützt. Die Währung, die beim Aufgeben der Bestellung verwendet wird. Angewendet auf erfolgreiche Erstellung der Bestellung.
creationDate datetime Nein Schreibgeschützt. Das Datum, an dem der Auftrag erstellt wurde, im Format Datum/Uhrzeit. Angewendet auf erfolgreiche Erstellung der Bestellung.
status Zeichenfolge Nein Schreibgeschützt. Der Status der Bestellung. Unterstützte Werte sind die Membernamen, die in OrderStatus gefunden werden.
Verknüpfungen OrderLinks Nein Die Ressourcenverknüpfung, die der Bestellung entspricht.
Attributen Resourceattributes Nein 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 Nein Die Abonnement-ID.
parentSubscriptionId Zeichenfolge Nein Optional. Die ID des übergeordneten Abonnements in einem Add-On-Angebot. Gilt nur für PATCH.
friendlyName Zeichenfolge Nein 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 Nein Das Enddatum der ersten Abrechnungsdauer des neuen Abonnements.
partnerIdOnRecord Zeichenfolge Nein 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> Nein 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 Nein Schreibgeschützt. Die Ressourcenverknüpfung, die dem Auftragspositionsartikel entspricht.
Attributen Resourceattributes Nein Die Metadatenattribute, die dem OrderLineItem-Objekt entsprechen.
renewsTo Array aus Objekten Nein Ein Array von RenewsTo-Ressourcen .
AttestationAccepted bool Nein 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 Nein 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 Nein Eine ISO 8601-Darstellung der Dauer der Verlängerung. Die aktuellen unterstützten Werte sind P1M (1 Monat) und P1Y (1 Jahr).

Beispiel für eine Anfrage

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": "3D5ECED6-1151-44C7-AEE6-70A4BB725666",
        "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: b593cbb7-b358-4b31-81fc-e60b9c277a7f
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"
    }
}