Freigeben über


Erstellen einer Bestellung für einen Kunden mithilfe von Partner Center-APIs

Gilt für: Partner Center | Partner Center, betrieben von 21Vianet | Partner Center für die Microsoft-Cloud für die US-Regierung

Das Erstellen einer Bestellung für azure reservierte VM-Instanzprodukte gilt nur für:

  • Partnerzentrum

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 ist identisch mit 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 Bestellposition enthält die Kaufinformationen für ein Angebot. Sie müssen über mindestens eine Bestellposition verfügen.

  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 andere Händler einzuschließen, lesen Sie das folgende Beispiel für Anforderungs- und Antwortbeispiele:

Beispielanfrage

{
    "PartnerOnRecordAttestationAccepted":true, 
    "lineItems": [
        {
            "offerId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
            "quantity": 1,
            "lineItemNumber": 0,
            "PartnerIdOnRecord": "873452",
            "AdditionalPartnerIdsOnRecord":["4847383","873452"]
        }
    ],
    "billingCycle": "monthly"
}

Antwortbeispiel

{
    "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 den folgenden Pfadparameter, um den Kunden zu identifizieren.

Name Typ Erforderlich Description
Kunden-ID Schnur Yes Eine guid formatierte Kunden-ID, die den Kunden identifiziert.

Anforderungsheader

Weitere Informationen finden Sie unter Partner Center REST-Header.

Anfragekörper

Bestellung

In dieser Tabelle werden die Order-Eigenschaften im Anforderungstext beschrieben.

Eigentum Typ Erforderlich Description
id Schnur Nein Ein Auftragsbezeichner, der bei erfolgreicher Erstellung der Bestellung angegeben wird.
referenceCustomerId Schnur Nein Der Kundenbezeichner.
billingCycle Schnur Nein Gibt die Häufigkeit an, mit der der Partner für diese Bestellung in Rechnung gestellt wird. Unterstützte Werte sind die Membernamen, die in BillingCycleType gefunden werden. Der Standardwert ist "Monatlich" oder "OneTime" bei der Auftragserstellung. Dieses Feld wird auf erfolgreiche Erstellung der Bestellung angewendet.
lineItems Array von OrderLineItem-Ressourcen Yes Eine artikelisierte Liste der Angebote, die der Kunde kauft, einschließlich der Menge.
Währungscode Schnur Nein Schreibgeschützt Die Währung, die beim Aufgeben der Bestellung verwendet wird. Angewendet auf erfolgreiche Erstellung der Bestellung.
Erstellungsdatum Datum/Uhrzeit Nein Schreibgeschützt Das Datum, an dem die Reihenfolge erstellt wurde, im Datums-/Uhrzeitformat. Angewendet auf erfolgreiche Erstellung der Bestellung.
status Schnur Nein Schreibgeschützt Der Status der Bestellung. Unterstützte Werte sind die Membernamen, die in OrderStatus gefunden werden.
links OrderLinks Nein Die Ressourcenverknüpfung, die der Bestellung entspricht.
attributes ResourceAttributes Nein Die Metadatenattribute, die der Order entsprechen.
PartnerOnRecordAttestationAccepted Boolean Yes Bestätigt den Abschluss des Nachweises.

OrderLineItem

In dieser Tabelle werden die OrderLineItem-Eigenschaften im Anforderungstext beschrieben.

Hinweis

Beim Auschecken eines Warenkorbs über die API werden die Positionen in der Reihenfolge verarbeitet, in der sie in den Warenkorb gelegt werden. Die Bestellung kann sich auf die Berechtigung für Werbeaktionen mit Einschränkungen für New To Offer auswirken, wenn es zwei Produkte desselben Typs im Warenkorb gibt, eine mit der Promotions-ID und die andere ohne (z. B. mit unterschiedlichen Bedingungen). Stellen Sie sicher, dass Sie alle Positionen, die für eine Werbeaktion berechtigt sind, zuerst im Warenkorb platzieren, wenn Sie mehrere Artikel auschecken.

Name Typ Erforderlich Description
lineItemNumber INT Yes Jedes Zeilenelement in der Auflistung erhält eine eindeutige Zeilennummer, die von 0 bis 1 gezählt wird.
offerId Schnur Yes Der Angebotsbezeichner. Stellen Sie sicher, dass die Verfügbarkeit des Angebots für das richtige Segment gilt.
subscriptionId Schnur Nein Der Abonnementbezeichner.
parentSubscriptionId Schnur Nein Wahlfrei. Die ID des übergeordneten Abonnements in einem Add-On-Angebot. Gilt nur für PATCH.
friendlyName Schnur Nein Wahlfrei. Der Anzeigename für das vom Partner definierte Abonnement, um mehrdeutig zu sein.
Menge INT Yes Die Anzahl der Lizenzen für ein lizenzbasiertes Abonnement.
customTermEndDate DateTime Nein Das Enddatum der ersten Abrechnungsdauer des neuen Abonnements.
partnerIdOnRecord Schnur 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). Dies sorgt für eine ordnungsgemäße Erfassung von Anreizen.
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.
links OrderLineItemLinks Nein Schreibgeschützt Die Ressourcenverknüpfung, die dem Auftragspositionsartikel entspricht.
attributes ResourceAttributes Nein Die Metadatenattribute, die dem OrderLineItem-Objekt entsprechen.
renewsTo Array mit Objekten Nein Ein Array von RenewsTo-Ressourcen .
AttestationAccepted Boolesch 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 anderen Wiederverkäufer. Es können nur maximal fünf indirekte Wiederverkäufer eingegeben werden. Dieser Wert gilt nur für Partner, die innerhalb europäischen Ländern/Regionen transagieren.
scheduledNextTermInstructions Objekt Nein Definiert die nächsten Laufzeitanweisungen für ein Testabonnement. Partner können die Laufzeit, die Abrechnungshäufigkeit und die Menge angeben, die das entsprechende kostenpflichtige Abonnement bei der Verlängerung hat.

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

RenewsTo

In dieser Tabelle werden die RenewsTo-Eigenschaften im Anforderungstext für Microsoft Marketplace-Angebote beschrieben.

Eigentum Typ Erforderlich Description
termDuration Schnur Nein Eine ISO 8601-Darstellung der Dauer der Verlängerung. Die aktuellen unterstützten Werte sind P1M (1 Monat) und P1Y (1 Jahr).
ScheduledNextTermInstructions

In dieser Tabelle werden die Eigenschaften der Anweisung scheduledNextTermInstructions im Anforderungstext für lizenzbasierte Testangebote in der neuen Commerce-Erfahrung (NCE) beschrieben. Wenn keine Werte angegeben sind, werden Testversionen zu kostenpflichtigen Abonnements mit einer jährlichen Laufzeit, einer monatlichen Rechnungsstellung und 25 Lizenzen pro Jahr.

Eigentum Typ Erforderlich Description
Produkt Array Nein Ein Array, das das Angebot angibt, in dem ein Testabonnement verlängert wird, sowie die Laufzeit und Abrechnungshäufigkeit, über die das kostenpflichtige Abonnement verfügt.
Menge INT Nein Die Lizenzmenge, über die das entsprechende kostenpflichtige Abonnement verfügt, sobald das Testangebot verlängert wird.
Produkt

In dieser Tabelle werden die productTerm-Eigenschaften im Anforderungstext für lizenzbasierte Testangebote auf NCE-Basis beschrieben. Wenn in diesem Array keine Werte angegeben sind, verlängern sich Testversionen in kostenpflichtige Abonnements mit jährlicher Laufzeit, monatlicher Abrechnung.

Eigentum Typ Erforderlich Description
Produkt-ID Schnur Nein Eine GUID, die so formatiert ist, dass sie das Produkt des kostenpflichtigen Abonnements darstellt, in das die Testversion verlängert wird.
skuId Schnur Nein Eine GUID, die so formatiert ist, dass sie die SKU des kostenpflichtigen Abonnements darstellt, in das die Testversion übergeht.
availabilityId Schnur Nein Eine GUID, die formatiert ist, um die Verfügbarkeit des kostenpflichtigen Abonnements darzustellen, in das die Testversion verlängert wird.
billingCycle Schnur Nein Die Abrechnungshäufigkeit, über die das entsprechende kostenpflichtige Abonnement verfügt, sobald das Testangebot verlängert wird.
termDuration Schnur Nein Die Laufzeit, die das entsprechende kostenpflichtige Abonnement hat, sobald das Testangebot verlängert wird.

Beispielanfrage

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
    }
  ]
}
// request example where some renewal values for an NCE license-based trial are specified
http
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: 486
Content-Type: application/json
{
  "lineItems": [
    {
      "id": 0,
      "catalogItemId": "CFQ7TTC0LCHC:0003:CFQ7TTC0XCQC",
      "quantity": 25,
      "currencyCode": "USD",
      "billingCycle": "none",
      "termDuration": "P1M",
      "promotionId": null,
      "provisioningContext": {},
      "customTermEndDate": null,
      "scheduledNextTermInstructions": {
        "product": {
          "billingCycle": "monthly",
          "termDuration": "P1M" 
        }
      }
    }
  ],
  "partnerOnRecordAttestationAccepted": true
}

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 werden. 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 die jeweiligen Abonnements bereitgestellt wurden, kann jedoch über Get Orders und Get Order by ID API-Aufrufe auf ihre Abonnement-ID-Werte zugegriffen werden.

Antworterfolgs- und Fehlercodes

Jede Antwort enthält einen HTTP-Statuscode, der Erfolg oder Fehler und weitere Debuginformationen angibt. Verwenden Sie ein Netzwerkablaufverfolgungstool, um diesen Code, fehlertyp und andere Parameter zu lesen. Die vollständige Liste finden Sie unter Partner Center-Fehlercodes.

Antwortbeispiel

{
  "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"
    }
}
// response content for an order containing an NCE license-based trial
{
  "id": "99d3777b-61da-4c95-aefa-203c248c4180",
  "creationTimestamp": "2025-02-04T22:22:36.7924103Z",
  "lastModifiedTimestamp": "2025-02-04T22:22:36.7924109Z",
  "expirationTimestamp": "2025-02-11T22:23:34.5190698Z",
  "lastModifiedUser": "b5109661-56c5-45ed-9447-f67463458a97",
  "status": "Active",
  "lineItems": [
    {
      "id": 0,
      "catalogItemId": "CFQ7TTC0LCHC:0003:CFQ7TTC0XCQC",
      "quantity": 25,
      "currencyCode": "USD",
      "billingCycle": "none",
      "termDuration": "P1M",
      "provisioningContext": {},
      "orderGroup": "0",
      "pricing": {
        "listPrice": 0.0,
        "discountedPrice": 0.0,
        "proratedPrice": 0.0,
        "price": 0.0,
        "extendedPrice": 0.0
      },
      "scheduledNextTermInstructions": {
        "product": {
          "productId": "CFQ7TTC0LCHC",
          "skuId": "0002",
          "availabilityId": "CFQ7TTC0XL82",
          "billingCycle": "monthly",
          "termDuration": "P1M"
        },
        "quantity": 25
      }
    }
  ],
  "links": {
    "self": {
      "uri": "/customers/81e78b53-9aa8-44e7-a041-3b15272d8f84/carts/99d3777b-61da-4c95-aefa-203c248c4180",
      "method": "GET",
      "headers": []
    }
  },
  "attributes": {
    "objectType": "Cart"
  }
}