Tworzenie koszyka z zamówieniem klienta
Dotyczy: Centrum partnerskie | Centrum partnerskie obsługiwane przez firmę 21Vianet | Centrum partnerskie dla chmury firmy Microsoft dla instytucji rządowych USA
Możesz dodać zamówienie dla klienta w koszyku. Aby uzyskać więcej informacji o tym, co jest obecnie dostępne do sprzedaży, zobacz Oferty partnerskie w programie Dostawca rozwiązań w chmurze.
Uwaga
Koszyki wygasają 7 dni od początkowego utworzenia.
Wymagania wstępne
Poświadczenia zgodnie z opisem w temacie 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 klienta z listy klienta, a następnie pozycję Konto. Na stronie Konto klienta poszukaj identyfikatora Microsoft w sekcji Informacje o koncie klienta. Identyfikator Microsoft jest taki sam jak identyfikator klienta (customer-tenant-id
).
C#
Aby utworzyć zamówienie dla klienta:
Utwórz wystąpienie obiektu koszyka.
Utwórz listę obiektów CartLineItem i przypisz listę do właściwości LineItems koszyka. Każdy element wiersza koszyka zawiera informacje o zakupie dla jednego produktu. Musisz mieć co najmniej jeden element wiersza koszyka.
Uzyskaj interfejs operacji koszyka, wywołując metodę IAggregatePartner.Customers.ById z identyfikatorem klienta, aby zidentyfikować klienta, a następnie pobierając interfejs z właściwości Cart .
Wywołaj metodę Create lub CreateAsync , aby utworzyć koszyk.
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": [
{
"id": 0,
"catalogItemId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
"quantity": 1,
"billingCycle": "monthly",
"termDuration": "P1M",
"renewsTo": null,
"provisioningContext": {},
"customTermEndDate": "2022-02-19T00:00:00Z"
},
{
"id": 1,
"catalogItemId": "CFQ7TTC0LFLS:0002:CFQ7TTC0KDLJ",
"quantity": 2,
"billingCycle": "monthly",
"termDuration": "P1Y",
"participants": [
{
"key": "transaction_reseller",
"value": "5357564"
},
{
"key": "additional_transaction_reseller",
"value": "517285"
},
{
"key": "additional_transaction_reseller",
"value": "5357563"
}
]
}
]
}
Przykład odpowiedzi
{
"id": "3e22b548-647d-4223-9675-1fcb6cb57665",
"creationTimestamp": "2021-08-18T17:29:52.3517492Z",
"lastModifiedTimestamp": "2021-08-18T17:29:52.3517553Z",
"expirationTimestamp": "2021-08-25T17:30:11.2406416Z",
"lastModifiedUser": "da62a0dc-35e9-4601-b48e-a047bd3ec7c1",
"status": "Active",
"lineItems": [
{
"id": 0,
"catalogItemId": "CFQ7TTC0LH0Z:0001:CFQ7TTC0K18P",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1M",
"customTermEndDate": "2022-02-19T00:00:00Z";
"provisioningContext": {},
"orderGroup": "0"
},
{
"id": 1,
"catalogItemId": "CFQ7TTC0LFLS:0002:CFQ7TTC0KDLJ",
"quantity": 2,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1Y",
"participants": [
{
"key": "transaction_reseller",
"value": "5357564"
},
{
"key": "additional_transaction_reseller",
"value": "517285"
},
{
"key": "additional_transaction_reseller",
"value": "5357563"
}
],
"provisioningContext": {},
"orderGroup": "0"
}
],
"links": {
"self": {
"uri": "/customers/f81d98dd-c2f4-499e-a194-5619e260344e/carts/3e22b548-647d-4223-9675-1fcb6cb57665",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Cart"
}
}
Przykład w języku C#
// IAggregatePartner partnerOperations;
// string customerId;
// string subscriptionId;
var cart = new Cart()
{
LineItems = new List<CartLineItem>()
{
new CartLineItem()
{
/* Microsoft Azure Subscription */
Id = 0,
CatalogItemId = "MS-AZR-0145P",
Quantity = 1,
BillingCycle = BillingCycleType.Monthly,
TermDuration = "P1Y"
},
new CartLineItem()
{
/* Azure Reserved Instance */
Id = 1,
CatalogItemId = "DZH318Z0BQ36:004G:DZH318Z08C0S",
Quantity = 1,
BillingCycle = BillingCycleType.OneTime,
TermDuration = "P1Y",
ProvisioningContext = new Dictionary<string, string>
{
{ "subscriptionId", subscriptionId },
{ "scope", "shared" }
}
},
new CartLineItem()
{
/* Azure Reserved Instance */
Id = 2,
CatalogItemId = "DZH318Z0BQ36:004J:DZH318Z08B8X",
Quantity = 1,
BillingCycle = BillingCycleType.OneTime,
TermDuration = "P3Y",
ProvisioningContext = new Dictionary<string, string>
{
{ "subscriptionId", subscriptionId },
{ "scope", "shared" }
}
},
new CartLineItem()
{
/* Perpetual Software */
Id = 3,
CatalogItemId = "DG7GMGF0DWM3:0002:DG7GMGF0DT1M",
Quantity = 1,
BillingCycle = BillingCycleType.OneTime
},
new CartLineItem()
{
/* SaaS */
Id = 4,
CatalogItemId = "DZH318Z0BXWC:0002:DZH318Z0BMRV",
Quantity = 1,
BillingCycle = BillingCycleType.Monthly,
TermDuration = "P1M"
},
new CartLineItem()
{
/* SaaS Free Trial */
Id = 5,
CatalogItemId = "DZH318Z0C0WF:0001:DZH318Z0BP69",
Quantity = 10,
BillingCycle = BillingCycleType.None,
TermDuration = "P1M",
RenewsTo = new RenewsTo
{
TermDuration = "P1Y"
}
}
}
};
cart = partnerOperations.Customers.ById(customerId).Carts.Create(cart);
Java
Zestaw SDK Java Centrum partnerskiego może służyć do zarządzania zasobami Centrum partnerskiego. Jest to projekt typu open source obsługiwany przez społeczność partnerów i nie jest oficjalnie obsługiwany przez firmę Microsoft. Jeśli wystąpi problem, możesz uzyskać pomoc od społeczności lub otworzyć problem w usłudze GitHub .
Aby utworzyć zamówienie dla klienta:
Utwórz wystąpienie obiektu koszyka.
Utwórz listę obiektów CartLineItem i przypisz listę do elementów wiersza koszyka. Każdy element wiersza koszyka zawiera informacje o zakupie dla jednego produktu. Musisz mieć co najmniej jeden element wiersza koszyka.
Uzyskaj interfejs operacji koszyka, wywołując funkcję IAggregatePartner.getCustomers().byId z identyfikatorem klienta, aby zidentyfikować klienta, a następnie pobierając interfejs z funkcji getCart .
Wywołaj funkcję create, aby utworzyć koszyk.
Przykład języka Java
// IAggregatePartner partnerOperations;
// String customerId;
// String subscriptionId;
// String catalogItemId;
CartLineItem lineItem = new CartLineItem();
lineItem.setBillingCycle(BillingCycleType.OneTime);
lineItem.setCatalogItemId(catalogItemId);
lineItem.setFriendlyName("Sample RI Purchase");
lineItem.setQuantity(1);
Map<String, String> provisioningContext = new HashMap<String,String>();
provisioningContext.put("duration", "3Years");
provisioningContext.put("scope", "shared");
provisioningContext.put("subscriptionId", subscriptionId);
lineItem.setProvisioningContext(provisioningContext);
List<CartLineItem> lineItemList = new ArrayList<CartLineItem>();
lineItemList.add(lineItem);
Cart cart = new Cart();
cart.setLineItems(lineItemList);
Cart cartCreated = partnerOperations.getCustomers().byId(customerId).getCarts().create(cart);
PowerShell
Moduł PowerShell Centrum partnerskiego może służyć do zarządzania zasobami Centrum partnerskiego. Jest to projekt typu open source obsługiwany przez społeczność partnerów i nie jest oficjalnie obsługiwany przez firmę Microsoft. Jeśli wystąpi problem, możesz uzyskać pomoc od społeczności lub otworzyć problem w usłudze GitHub .
Aby utworzyć zamówienie dla klienta:
Utwórz wystąpienie obiektu koszyka.
Utwórz listę obiektów CartLineItem i przypisz listę do elementów wiersza koszyka. Każdy element wiersza koszyka zawiera informacje o zakupie dla jednego produktu. Musisz mieć co najmniej jeden element wiersza koszyka.
Wykonaj polecenie New-PartnerCustomerCart, aby utworzyć koszyk.
# $customerId
# $subscriptionId
# $catalogItemId
$lineItem = New-Object -TypeName Microsoft.Store.PartnerCenter.PowerShell.Models.Carts.PSCartLineItem
$lineItem.BillingCycle = 'OneTime'
$lineItem.CatalogItemId = $catalogItemId
$lineItem.FriendlyName = 'Sample RI Purchase'
$lineItem.ProvisioningContext.Add('duration', '1Year')
$lineItem.ProvisioningContext.Add('scope', 'shared')
$lineItem.ProvisioningContext.Add('subscriptionId', $subsciptionId)
$lineItem.Quantity = 10
New-PartnerCustomerCart -CustomerId $customerId -LineItems $lineItem
Żądanie REST
Składnia żądania
Method | Identyfikator URI żądania |
---|---|
POST | {baseURL}/v1/customers/{customer-id}/carts HTTP/1.1 |
Parametr identyfikatora URI
Użyj następującego parametru ścieżki, aby zidentyfikować klienta.
Nazwisko | Type | Wymagania | opis |
---|---|---|---|
identyfikator klienta | string | Tak | Identyfikator GUID sformatowany przez klienta, który identyfikuje klienta. |
Nagłówki żądań
Aby uzyskać więcej informacji, zobacz Nagłówki REST Centrum partnerskiego.
Treść żądania
W tej tabeli opisano właściwości koszyka w treści żądania.
Właściwość | Type | Wymagania | Opis |
---|---|---|---|
identyfikator | string | Nie | Identyfikator koszyka dostarczony po pomyślnym utworzeniu koszyka. |
creationTimeStamp | DateTime | Nie. | Data utworzenia koszyka w formacie daty i godziny. Zastosowane po pomyślnym utworzeniu koszyka. |
lastModifiedTimeStamp | DateTime | Nie. | Data ostatniej aktualizacji koszyka w formacie daty i godziny. Zastosowane po pomyślnym utworzeniu koszyka. |
expirationTimeStamp | DateTime | Nie. | Data wygaśnięcia koszyka w formacie daty i godziny. Zastosowane po pomyślnym utworzeniu koszyka. |
lastModifiedUser | string | Nie | Użytkownik, który ostatnio zaktualizował koszyk. Zastosowane po pomyślnym utworzeniu koszyka. |
lineItems | Tablica obiektów | Tak | Tablica zasobów CartLineItem . |
PartnerOnRecordAttestationAccepted | Wartość logiczna | Tak | Potwierdza ukończenie zaświadczania |
W tej tabeli opisano właściwości CartLineItem w treści żądania.
Właściwość | Type | Wymagania | Opis |
---|---|---|---|
identyfikator | string | Nie | Unikatowy identyfikator elementu wiersza koszyka. Zastosowane po pomyślnym utworzeniu koszyka. |
catalogId | string | Tak | Identyfikator elementu wykazu. Upewnij się, że dostępność elementu wykazu jest odpowiednia dla prawidłowego segmentu. |
friendlyName | string | Nie | Opcjonalny. Przyjazna nazwa elementu zdefiniowanego przez partnera w celu ułatwienia uściślania. |
identyfikator promocji | string | Nie | Opcjonalny. Większość promocji NCE będzie automatycznie stosować, jednak w przypadku opcjonalnych promocji (takich jak Bridge to the Cloud 2) w celu zastosowania do elementu wiersza koszyka, partnerzy muszą dołączyć identyfikator promocji w żądaniu dodawania do koszyka. |
ilość | int | Tak | Liczba licencji lub wystąpień. |
currencyCode | string | Nie | Kod waluty. |
billingCycle | Objekt | Tak | Typ cyklu rozliczeniowego ustawiony dla bieżącego okresu. |
customTermEndDate | DateTime | Nie. | Data zakończenia istniejącej subskrypcji, do której chcesz współterminować nową subskrypcję. |
Uczestników | Lista par ciągów obiektów | Nie. | Kolekcja PartnerId w rekordzie (PartnerID) podczas zakupu. |
provisioningContext | Ciąg słownika<, ciąg> | Nie. | Informacje wymagane do aprowizacji niektórych elementów w wykazie. Właściwość provisioningVariables w jednostce SKU wskazuje, które właściwości są wymagane dla określonych elementów w wykazie. |
orderGroup | string | Nie | Grupa wskazująca, które elementy można umieścić razem. |
error | Objekt | Nie. | Zastosowane po utworzeniu koszyka, jeśli wystąpi błąd. |
renewsTo | Tablica obiektów | Nie. | Tablica zasobów RenewsTo . |
ZaświadczenieAccepted | Wartość logiczna | Nie. | Wskazuje umowę na warunki oferty lub jednostki SKU. Wymagane tylko w przypadku ofert lub jednostek SKU, w których wartość SkuAttestationProperties lub OfferAttestationProperties wymusza wartość True. |
transaction_reseller | String | Nie | Gdy dostawca pośredni składa zamówienie w imieniu odsprzedawcy pośredniego, wypełnij to pole tylko identyfikatorem PartnerID odsprzedawcy pośredniego (nigdy identyfikator dostawcy pośredniego). Zapewnia to właściwą księgowość zachęt. |
additional_transaction_reseller | String | Nie | Gdy dostawca pośredni składa zamówienie w imieniu odsprzedawcy pośredniego, wypełnij to pole tylko identyfikatorem PartnerID dodatkowego odsprzedawcy pośredniego (nigdy identyfikator dostawcy pośredniego). Zachęty nie mają zastosowania dla tych dodatkowych odsprzedawców. Można wprowadzić maksymalnie 5 odsprzedawców pośrednich. Dotyczy to tylko transakcji partnerów w krajach/regionach UE/EFTA. |
W tej tabeli opisano właściwości RenewsTo w treści żądania.
Właściwość | Type | Wymagania | opis |
---|---|---|---|
termDuration | string | Nie | Reprezentacja iso 8601 czasu trwania okresu odnowienia. Bieżące obsługiwane wartości to P1M (1 miesiąc) i P1Y (1 rok). |
Przykład żądania
POST /v1/customers/d6bf25b7-e0a8-4f2d-a31b-97b55cfc774d/carts HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 4fa6dad6-a89f-4875-8247-8294a10ae1cf
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
X-Locale: en-US
MS-PartnerCenter-Client: Partner Center .NET SDK
Content-Type: application/json
Host: api.partnercenter.microsoft.com
Content-Length: 496
Expect: 100-continue
{
"lineItems": [
{
/* Microsoft Azure Subscription */
"id": 0,
"catalogItemId": "MS-AZR-0145P",
"quantity": 1,
"billingCycle": "monthly",
"termDuration": "P1Y"
},
{
/* Azure Reserved Instance */
"id": 1,
"catalogItemId": "DZH318Z0BQ36:004G:DZH318Z08C0S",
"quantity": 1,
"billingCycle": "one_time",
"termDuration": "P1Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "shared"
}
},
{
/* Azure Reserved Instance */
"id": 2,
"catalogItemId": "DZH318Z0BQ36:004J:DZH318Z08B8X",
"quantity": 1,
"billingCycle": "one_time",
"termDuration": "P3Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "single"
}
},
{
/* Perpetual Software */
"id": 3,
"catalogItemId": "DG7GMGF0DWTL:0001:DG7GMGF0DSFM",
"quantity": 1,
"billingCycle": "one_time"
},
{
/* SaaS */
"id": 4,
"catalogItemId": "DZH318Z0BXWC:0002:DZH318Z0BMRV",
"quantity": 1,
"billingCycle": "monthly",
"termDuration": "P1M"
},
{
/* SaaS Free Trial */
"id": 5,
"catalogItemId": "DZH318Z0C0WF:0001:DZH318Z0BP69",
"quantity": 10,
"billingCycle": "none",
"termDuration": "P1M",
"renewsTo": {
"termDuration": "P1Y"
}
}
]
}
Ważne
Od czerwca 2023 r. najnowsza wersja zestawu .NET SDK Centrum partnerskiego 3.4.0 jest teraz archiwizowana. Możesz pobrać wersję zestawu SDK z usługi GitHub wraz z plikiem readme zawierającym przydatne informacje.
Zachęcamy partnerów do dalszego korzystania z interfejsów API REST Centrum partnerskiego.
Odpowiedź REST
Jeśli ta metoda powiedzie się, zwraca wypełniony zasób koszyka w treści odpowiedzi.
Kody powodzenia i błędów odpowiedzi
Każda odpowiedź zawiera kod stanu HTTP, który wskazuje powodzenie lub niepowodzenie i informacje 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.
Przykład odpowiedzi
HTTP/1.1 201 Created
Content-Length: 764
Content-Type: application/json; charset=utf-8
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
MS-RequestId: 4fa6dad6-a89f-4875-8247-8294a10ae1cf
X-Locale: en-US,en-US
MS-CV: sF/wRa2ih0CzbABc.0
MS-ServerId: 000001
Date: Thu, 15 Mar 2018 17:15:01 GMT
{
"id": "3655b1a0-b1c9-4268-9824-577fdbc4d0be",
"creationTimestamp": "2019-01-16T00:45:41.6062996Z",
"lastModifiedTimestamp": "2019-01-16T00:45:41.6062996Z",
"expirationTimestamp": "2019-01-16T01:00:54.4188497Z",
"lastModifiedUser": "1824b7fc-2fac-4478-b177-66823c40ab75",
"status": "Active",
"lineItems": [
{
"id": 0,
"catalogItemId": "MS-AZR-0145P",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1Y",
"orderGroup": "OMS-0"
},
{
"id": 1,
"catalogItemId": "DZH318Z0BQ36:004G:DZH318Z08C0S",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "one_time",
"termDuration": "P1Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "shared"
},
"orderGroup": "0"
},
{
"id": 2,
"catalogItemId": "DZH318Z0BQ36:004J:DZH318Z08B8X",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "one_time",
"termDuration": "P3Y",
"provisioningContext": {
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"scope": "shared"
},
"orderGroup": "0"
},
{
"id": 3,
"catalogItemId": "DG7GMGF0DWM3:0002:DG7GMGF0DT1M",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "one_time",
"orderGroup": "0"
},
{
"id": 4,
"catalogItemId": "DZH318Z0BXWC:0002:DZH318Z0BMRV",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1M",
"orderGroup": "1"
},
{
"id": 5,
"catalogItemId": "DZH318Z0C0WF:0001:DZH318Z0BP69",
"quantity": 10,
"currencyCode": "USD",
"billingCycle": "none",
"termDuration": "P1M",
"renewsTo": {
"termDuration": "P1Y"
},
"orderGroup": "2"
}
],
"links": {
"self": {
"uri": "/customers/28045616-f6b9-462f-9701-0d89b5e65c44/carts/3655b1a0-b1c9-4268-9824-577fdbc4d0be",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Cart"
}
}
Przykład nowych usług opartych na licencjach handlowych
Uwaga
Nowe środowiska handlowe dla usług opartych na licencjach obejmują wiele nowych funkcji i są dostępne dla wszystkich Dostawca rozwiązań w chmurze (CSP). Aby uzyskać więcej informacji, zobacz omówienie nowych środowisk handlowych.
Przykład żądania
POST /v1/customers/932c4101-dc08-461b-b4c1-75d80e905775/carts HTTP/1.1
Host: api.partnercenter.microsoft.com
Content-Type: application/json
Content-Length: 165
{
"LineItems": [
{
"CatalogItemId":"CFQ7TTC0LFLZ:0002:CFQ7TTC0K4TS",
"Quantity": 1,
"TermDuration": "P1M",
"BillingCycle": "Monthly"
}
]
}
Ważne
Elementy wiersza planu platformy Azure i bezterminowego oprogramowania nie obsługują właściwości termDuration. Należy unikać dołączania tego typu elementów.
Odpowiedź REST
Jeśli ta metoda powiedzie się, zwraca wypełniony zasób koszyka w treści odpowiedzi.
Kody powodzenia i błędów odpowiedzi
Każda odpowiedź zawiera kod stanu HTTP, który wskazuje powodzenie lub niepowodzenie i inne informacje 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.
Przykład odpowiedzi
{
"id": "2517c51b-58cd-4abe-87ed-3ab812401ab4",
"creationTimestamp": "2023-07-11T21:16:11.55149Z",
"lastModifiedTimestamp": "2023-07-11T21:16:11.5515713Z",
"expirationTimestamp": "2023-07-18T21:16:17.2480482Z",
"lastModifiedUser": "9db12087-fbc3-481c-8965-73d44ff88e27",
"status": "Active",
"lineItems": [
{
"id": 0,
"catalogItemId": "CFQ7TTC0LF8S:0001:CFQ7TTC0VZW5",
"quantity": 1,
"currencyCode": "USD",
"billingCycle": "monthly",
"termDuration": "P1Y",
"provisioningContext": {},
"orderGroup": "0",
"pricing": {
"listPrice": 30.4,
"discountedPrice": 30.4,
"proratedPrice": 30.4,
"price": 30.4,
"extendedPrice": 364.8
}
}
],
"links": {
"self": {
"uri": "/customers/ebd8b4c2-4069-46a8-bd70-123d6dec3e39/carts/2517c51b-58cd-4abe-87ed-3ab812401ab4",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Cart"
}
}