Udostępnij przez


Tworzenie zamówienia dla klienta przy użyciu interfejsów API Centrum partnerskiego

Dotyczy: Centrum partnerskie | Centrum partnerskie obsługiwane przez firmę 21Vianet | Centrum partnerskie dla chmury firmy Microsoft dla instytucji rządowych USA

Tworzenie zamówienia dla produktów wystąpień zarezerwowanych maszyn wirtualnych platformy Azure ma zastosowanie tylko tylko:

  • Centrum partnerskie

Aby uzyskać informacje o tym, co jest obecnie dostępne do sprzedaży, zobacz oferty partnerów w programie Cloud Solution Provider.

Warunki wstępne

  • Poświadczenia zgodnie z opisem w uwierzytelnianie w Centrum partnerskim. Ten scenariusz obsługuje uwierzytelnianie zarówno przy użyciu autonomicznych poświadczeń aplikacji, jak i aplikacji i użytkownika.

  • Identyfikator klienta (customer-tenant-id). Jeśli nie znasz identyfikatora klienta, możesz wyszukać go w centrum partnerskim , wybierając obszar roboczy Klienci, a następnie klient z listy klientów, a następnie konto. Na stronie Konta klienta poszukaj identyfikatora Microsoft w sekcji Informacje o Koncie Klienta. Identyfikator Firmy Microsoft jest taki sam jak identyfikator klienta (customer-tenant-id).

  • Identyfikator oferty.

C#

Aby utworzyć zamówienie dla klienta:

  1. Utwórz wystąpienie obiektu Order i ustaw właściwość ReferenceCustomerID na identyfikator klienta, aby zarejestrować klienta.

  2. Utwórz listę obiektów OrderLineItem i przypisz tę listę do właściwości LineItems zamówienia. Każda pozycja zamówienia zawiera informacje o zakupie dotyczące jednej oferty. Musisz mieć co najmniej jedną pozycję w zamówieniu.

  3. Zdobyć interfejs do zamawiania operacji. Najpierw wywołaj metodę IAggregatePartner.Customers.ById za pomocą identyfikatora klienta, aby zidentyfikować klienta. Następnie pobierz interfejs z właściwości Orders.

  4. Wywołaj metodę Create lub CreateAsync i przekaż obiekt Order.

  5. Aby ukończyć zaświadczenie i dołączyć innych odsprzedawców, zobacz następujące przykładowe przykłady żądań i odpowiedzi:

Przykład żądania

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

Przykład odpowiedzi

{
    "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);

Przykładowy: aplikacja testowa konsoli. Projekt: Partner Center SDK Samples Klasa: CreateOrder.cs

Żądanie REST

Składnia żądania

Metoda Identyfikator URI żądania
POST {baseURL}/v1/customers/{customer-id}/orders HTTP/1.1

Parametry identyfikatora URI

Użyj następującego parametru ścieżki, aby zidentyfikować klienta.

Nazwa Typ Wymagane Opis
identyfikator klienta ciąg Tak Identyfikator klienta w formacie GUID, który identyfikuje klienta.

Nagłówki żądań

Aby uzyskać więcej informacji, zobacz Nagłówki REST Centrum Partnerskiego.

Treść żądania

Zamówienie

W tej tabeli opisano właściwości Order w treści żądania.

Własność Typ Wymagane Opis
id ciąg Nie Identyfikator zamówienia dostarczony po pomyślnym utworzeniu zamówienia.
IdentyfikatorKlientaReferencyjnego ciąg Nie Identyfikator klienta.
billingCycle ciąg Nie Wskazuje częstotliwość, z jaką partner jest rozliczany za to zamówienie. Obsługiwane wartości to nazwy członków znalezione w BillingCycleType. Wartość domyślna to "Monthly" lub "OneTime" podczas tworzenia zamówienia. To pole jest stosowane po pomyślnym utworzeniu zamówienia.
lineItems tablica zasobów OrderLineItem Tak Lista z elementami ofert, które klient kupuje, łącznie z ilością.
kod waluty ciąg Nie Tylko do odczytu. Waluta używana podczas składania zamówienia. Zastosowane po pomyślnym utworzeniu zamówienia.
creationDate (data utworzenia) data/godzina Nie Tylko do odczytu. Data utworzenia zamówienia w formacie daty i godziny. Zastosowane po pomyślnym utworzeniu zamówienia.
stan ciąg Nie Tylko do odczytu. Stan zamówienia. Obsługiwane wartości to nazwy elementów członkowskich znalezione w OrderStatus.
Linki OrderLinks Nie Linki zasobów odpowiadające zamówieniu.
Atrybuty ResourceAttributes Nie Atrybuty metadanych odpowiadające zamówieniu.
PotwierdzenieAkceptacjiPartneraNaRekordzie logiczny Tak Potwierdza ukończenie zaświadczania

Pozycja Zamówienia

W tej tabeli opisano właściwości OrderLineItem w treści żądania.

Uwaga

Podczas finalizowania zakupu koszyka przez API elementy wiersza są przetwarzane w kolejności, w której są umieszczane w koszyku. Zamówienie może mieć wpływ na uprawnienia do promocji z ograniczeniami New To Offer, jeśli istnieją dwa produkty tego samego typu w koszyku, jeden z identyfikatorem promocyjnym i drugi bez (na przykład z różnymi warunkami). Pamiętaj, aby umieścić wszystkie elementy wiersza kwalifikujące się do promocji najpierw w koszyku, jeśli kupujesz wiele elementów.

Nazwa Typ Wymagane Opis
numerPozycji Int Tak Każda pozycja w kolekcji otrzymuje unikalny numer wiersza, licząc od 0 do count-1.
offerId ciąg Tak Identyfikator oferty. Upewnij się, że dostępność oferty jest odpowiednia dla odpowiedniego segmentu.
identyfikator subskrypcji ciąg Nie Identyfikator subskrypcji.
nadrzędnyIdentyfikatorSubskrypcji ciąg Nie Fakultatywny. Identyfikator subskrypcji głównej w ofercie dodatkowej. Dotyczy tylko PATCH.
przyjazna nazwa ciąg Nie Fakultatywny. Przyjazna nazwa subskrypcji zdefiniowanej przez partnera w celu ułatwienia rozróżnienia.
ilość Int Tak Liczba licencji dla subskrypcji opartej na licencji.
customTermEndDate Data i czas Nie Data zakończenia pierwszego okresu rozliczeniowego nowej subskrypcji.
partnerIdOnRecord ciąg Nie Gdy dostawca pośredni składa zamówienie w imieniu odsprzedawcy pośredniego, wypełnij to pole identyfikatorem PartnerID odsprzedawcy pośredniego tylko (nigdy identyfikator dostawcy pośredniego). Zapewnia to właściwą księgowość zachęt.
kontekst konfiguracyjny Ciąg<słownika, ciąg> Nie Informacje wymagane do zapewnienia dostępności niektórych pozycji w katalogu. Właściwość provisioningVariables w jednostce SKU wskazuje, które właściwości są wymagane dla określonych elementów w wykazie.
Linki OrderLineItemLinks Nie Tylko do odczytu. Linki zasobów odpowiadające elementowi wiersza zamówienia.
Atrybuty ResourceAttributes Nie Atrybuty metadanych odpowiadające OrderLineItem.
renewsTo Tablica obiektów Nie Tablica zasobów RenewsTo.
ZaświadczeniePrzyjęte bool Nie Wskazuje zgodę na warunki oferty lub jednostki SKU. Wymagane tylko dla ofert lub SKU, gdzie SkuAttestationProperties lub OfferAttestationProperties wymuszają atestację jako True.
DodatkoweIdPartnerówWRekordzie Struna Nie Gdy dostawca pośredni składa zamówienie w imieniu odsprzedawcy pośredniego, wypełnij to pole identyfikatorem PartnerID Tylko dodatkowy odsprzedawca pośredni (nigdy identyfikator dostawcy pośredniego). Zachęty nie mają zastosowania dla tych innych odsprzedawców. Można wprowadzić maksymalnie pięć odsprzedawców pośrednich. Ta wartość dotyczy tylko transakcji partnerów w krajach/regionach europejskich.
scheduledNextTermInstructions obiekt Nie Definiuje kolejne instrukcje dotyczące subskrypcji próbnej. Partnerzy mogą określić czas trwania, częstotliwość rozliczeń i liczbę, jakie odpowiednia płatna subskrypcja będzie miała podczas odnawiania.

Uwaga

PartnerIdOnRecord powinien być podany tylko wtedy, gdy dostawca pośredni składa zamówienie w imieniu odsprzedawcy pośredniego. Służy do przechowywania tylko ID Partnera odsprzedawcy pośredniego (nigdy ID dostawcy pośredniego).

RenewsTo

W tej tabeli opisano właściwości RenewsTo w treści żądania ofert witryny Microsoft Marketplace.

Własność Typ Wymagane Opis
czas trwania ciąg Nie Reprezentacja ISO 8601 okresu trwania odnowienia. Bieżące obsługiwane wartości to P1M (1 miesiąc) i P1Y (1 rok).
ScheduledNextTermInstructions

W tej tabeli opisano właściwości scheduledNextTermInstructions w treści żądania dla nowych ofert próbnych opartych na licencji w ramach programu New Commerce Experience (NCE). Jeśli nie określono żadnych wartości, wersje próbne są odnawiane w płatnych subskrypcjach z rocznym okresem, miesięcznymi rozliczeniami i 25 licencjami.

Własność Typ Wymagane Opis
produkt macierz Nie Tablica określająca, w jaką ofertę odnawia się subskrypcja próbna oraz jakie są termin i częstotliwość rozliczeń dla płatnej subskrypcji.
ilość Int Nie Ilość licencji, którą odpowiednia płatna subskrypcja ma po odnowieniu oferty próbnej.
Product

W tej tabeli opisano właściwości productTerm w treści żądania dla ofert wersji próbnej opartej na licencji NCE. Jeśli w tej tablicy nie określono żadnych wartości, wersje próbne są odnawiane na płatne subskrypcje z rocznym okresem i miesięcznymi rozliczeniami.

Własność Typ Wymagane Opis
ID produktu ciąg Nie Identyfikator GUID sformatowany do reprezentowania produktu płatnej subskrypcji, do którego jest odnawiana wersja próbna.
skuId ciąg Nie Identyfikator GUID sformatowany do reprezentowania kodu SKU płatnej subskrypcji, w którą przekształca się wersja próbna.
availabilityId ciąg Nie Identyfikator GUID sformatowany w celu reprezentowania dostępności płatnej subskrypcji, na którą odnawia się okres próbny.
billingCycle ciąg Nie Częstotliwość rozliczeń dla płatnej subskrypcji po odnowieniu oferty próbnej.
czas trwania ciąg Nie Okres trwania, który odpowiada płatnej subskrypcji po odnowieniu oferty próbnej.

Przykład żądania

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
}

Odpowiedź REST

Jeśli operacja powiedzie się, metoda zwraca zasób Order w treści odpowiedzi.

Jeśli zamówienie zawiera co najmniej jedną subskrypcję, odpowiednie wartości identyfikatorów subskrypcji są wyświetlane tylko w odpowiedzi REST, jeśli odpowiednie subskrypcje są aprowidowane w momencie wywołania interfejsu API. Aprowizowanie subskrypcji odbywa się asynchronicznie, dlatego wartości identyfikatorów subskrypcji mogą nie zawsze być widoczne w odpowiedzi REST wywołania Tworzenie zamówienia. Jednak po aprowizacji odpowiednich subskrypcji można uzyskać dostęp do wartości ich identyfikatorów subskrypcji za pomocą wywołań API: Get Orders i Get Order by ID.

Kody powodzenia i błędów odpowiedzi

Każda odpowiedź zawiera kod stanu HTTP, który wskazuje powodzenie lub niepowodzenie i więcej informacji o debugowaniu. Użyj narzędzia do śledzenia sieci, aby odczytać ten kod, typ błędu i inne parametry. Aby uzyskać pełną listę, zobacz Kody błędów Centrum partnerskiego.

Przykład odpowiedzi

{
  "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"
  }
}