Pobranie listy koszyków
Artykuł zawiera opis metody zwracającej listę powiązanych koszyków wraz z przykładem implementacji metody w języku PHP.
Na tej stronie:
Opis metody
Metoda zwracająca informacje o aktywnych koszykach powiązanych z aplikacją Inpost Pay. Metoda nie wykorzystywana w procesie wiązania i obsługi koszyków/zamówień przez klienta.
W danej metodzie wymagamy implementacji wszystkich pól wymienionych w tabeli, ponieważ składają się na całość usługi InPost Pay. Część poniższych pól w kolumnie 'Wymagalność' jest oznaczona jako 'O' tj. opcjonalna ze względu na to, że nie wszystkie produkty/koszyki w sklepach internetowych mają przypisane wszystkie parametry, więc koszyk może zostać utworzony, a zamówienie złożone bez nich. Jednak implementacja/wdrożenie wszystkich pól jest biznesowo WYMAGANE.
Parameters
Nazwa pola | Opis | Typ | Wymagalność | Dodatkowe uwagi |
| Indeks stron | string | O |
|
| Rozmiar strony | string | O |
|
Request – brak
Response
Nazwa pola | Opis | Typ | Wymagalność | Dodatkowe uwagi |
| Rozmiar strony | string | O |
|
| Całkowita liczba pozycji | string | O |
|
| Indeks stron | string | O |
|
| Obiekt zwracający listę aktywnych koszyków w Inpost Pay | object | Y |
|
| Unikalny identyfikator koszyka nadawany przez merchanta | string | Y |
|
| Data utworzenia/powiązania koszyka z aplikacją Inpost Pay | string($date-time) | O |
|
| Data ostatniej aktualizacji koszyka | string($date-time) | O |
|
| Obiekt służący do przekazania podstawowych danych o koszyku | object | Y |
|
| Obiekt służący do przekazania ceny podstawowej za koszyk bez kosztów dostawy | object | Y |
|
| Cena netto | number ($decimal)(10,2) | Y |
|
| Cena brutto (netto + VAT) | number ($decimal)(10,2) | Y | |
| VAT | number ($decimal)(10,2) | Y | |
| Obiekt służący do przekazania ostatecznej ceny koszyka z uwzględnioną promocją i kodem rabatowym na koszyku bez kosztów dostawy. | object | O |
|
| Cena netto | number ($decimal)(10,2) | Y |
|
| Cena brutto (netto + VAT) | number ($decimal)(10,2) | Y | |
| VAT | number ($decimal)(10,2) | Y | |
| Obiekt służący do przekazania ceny koszyka z uwzględnioną promocją na koszyku, ale bez zastosowania kodu rabatowego i bez kosztów dostawy. | object | O |
|
| Cena netto | number ($decimal)(10,2) | Y |
|
| Cena brutto (netto + VAT) | number ($decimal)(10,2) | Y | |
| VAT | number ($decimal)(10,2) | Y | |
| Waluta koszyka. Obecnie obsługiwana tylko waluta PLN | string | Y |
|
| Data wygaśnięcia/ważności koszyka. Jest to data, po której koszyk zostanie automatycznie usunięty z aplikacji InPost Pay (straci ważność). Data nie może być przeszła. | string($date-time) | O |
|
| Pole służy do przekazania dodatkowych informacji o koszyku, które z punktu widzenia merchanta mogą być istotne dla klienta | string | O |
|
| Preferowane formy płatności dla koszyka. Merchant przekazuje listę preferowanych form płatności dla koszyka z których następnie klient ma możliwość wybrania form płatności. W przypadku przekazania pustej listy, klientowi zostanie zaprezentowana domyślna lista płatności zgodnie z konfiguracją merchanta w bramce płatniczej oraz CASH_ON_DELIVERY, gdy dla danej formy dostawy w Lista z możliwymi typami płatności: [ CARD, CARD_TOKEN, GOOGLE_PAY, APPLE_PAY, BLIK_CODE, BLIK_TOKEN, PAY_BY_LINK, SHOPPING_LIMIT, DEFERRED_PAYMENT, CASH_ON_DELIVERY ] | array | Y |
|
| Obiekt z informacją dodatkową o koszyku, o której merchant chce poinformować klienta w aplikacji Inpost Pay | object | O |
|
| Typ informacji. Wyróżniamy dwa typy informacji, na podstawie której, aplikacjia zaprezentuje odpowiedni format komunikatu Enum: [ ATTENTION, ERROR ]: ATTENTION – wykorzystujemy w przypadku, gdy chcemy poinformować klient o istotnych informacjach na koszyku, np. zastosowanie kodu promocyjnego, dodanie produktu gratis etc. ERROR – wykorzystujemy w przypadku, gdy nie udało się wykonać jakiegoś działania na koszyku np. niepoprawny kod promocyjny lub nie udana próba dodania produktu sugerowanego.
| string | Y |
|
| Treść komunikatu prezentowana klientowi w aplikacji Inpost Pay dla danego notice.type | string | Y |
|
| Obiekt służący do przekazania informacji o preferowanych formach dostawy dla danego koszyka | array | Y |
|
| Forma dostawy. Dostępne dwie formy [ APM, COURIER ]: APM – paczkomat, COURIER – kurier Inpost | string | Y |
|
| Sugerowana data dostawy | string($date-time) | O |
|
| Obiekt służący do przekazania dodatkowych opcji dostawy. Obecnie dostępne dwie dodatkowe opcje dostawy: PWW – paczka w weekend; COD – płatność przy odbierze. W przypadku, gdy dla danego koszyka w payment_type zostanie przekazana wartość CASH_ON_DELIVERY, obligatoryjnie należy przekazać COD jako dodatkową, opcje dostawy.
| array | O |
|
| Nazwa dodatkowej opcji dostawy | string | Y |
|
| Kod dodatkowej opcji dostawy. Obecnie dostępne dwa kody: PWW – paczka w weekend COD – płatność przy odbierze
| string | Y |
|
| Obiekt służący do przekazania informacji o koszcie dodatkowych opcji dostawy | object | Y |
|
| Cena netto | number ($decimal)(10,2)
| Y |
|
| Cena brutto (netto + VAT) | number ($decimal)(10,2)
| Y |
|
| VAT | number ($decimal)(10,2)
| Y |
|
| Obiekt służący do przekazania informacji o koszcie dostawy | object | Y |
|
| Cena netto | number ($decimal)(10,2)
| Y |
|
| Cena brutto (netto + VAT) | number ($decimal)(10,2)
| Y |
|
| VAT | number ($decimal)(10,2)
| Y |
|
| Minimalna wartość koszyka od jakiej koszt dostawy będzie wynosił 0 PLN | number ($decimal)(10,2)
| O |
|
| Funkcjonalność wykorzystująca obiekt dostępna w kolejnych wersjach aplikacji. Obiekt służący do przekazania informacji o szacowanym czasie dostawy w przypadku zamówienia towarów przez klienta w określonym czasie | array | O |
|
| Treść komunikatu prezentowana klientowi aplikacji | string | Y | |
| Dni tygodnia w jakich ma być prezentowany komunikat | array | O | |
| Godzina od której ma być prezentowany komunikat | string | O | |
| Godzina do której ma być prezentowany komunikat | string | O | |
| Lista kodów promocyjnych zastosowanych na koszyku | array | O |
|
| Nazwa kodu (w kolejnej wersji aplikacji pole nie wymagalne) | string | Y |
|
| Kod promocyjny | string | Y |
|
| Typ regulacji lub restrykcji, której kod promocyjny podlega. UWAGA: W przypadku gdy, kod promocyjny jest kodem w myśl dyrektywy OMNIBUS to należy przekazać wartość „OMNIBUS”. | string | O |
|
| Lista dostępnych kodów promocyjnych, które klient może wykorzystać w koszyku. | array | O |
|
| Typ kodu: ONLY_IN_APP - kod dostępny tylko w aplikacji InPost Pay (TYLKO W APCE). | string | Y | |
| Wartość kodu np. DOSTAWA | string | Y | |
| Opis kodu Max: 60 znaków | string | Y | |
| Data początkowa obowiązywania kodu promocyjnego | string($date-time) | O | |
| Data końcowa obowiązywania kodu promocyjnego | string($date-time) | O | |
| Priorytet kodu | integer | O | |
| Szczegóły kodu promocyjnego | object | Y | |
| Link do szczegółów informacji o kodzie promocyjnym w sklepie merchanta. | string | Y | |
| Lista do przekazania informacji o produktach w koszyku | array | Y |
|
| Identyfikator produktu nadany przez merchanta | string | Y |
|
| Kategoria produktu nadana przez merchanta | string | O |
|
| Ean | string | O |
|
| Nazwa produktu | string | Y |
|
| Opis produktu | string | O |
|
| Link do produktu na stronie merchanta | string | O |
|
| Link do zdjęcia produktu. Preferowane format: png, jpg (rekomendacja: png bez tła)
| string | O |
|
| Obiekt do przekazania dodatkowych zdjęć produktu (lista) | object | O |
|
| Zdjęcie produktu. Preferowany rozmiar 360 x 352 | string | Y |
|
| Zdjęcie produktu. Preferowany rozmiar 360 x 504 | string | Y |
|
| Cena podstawowa z produkt | object | Y |
|
| Cena netto | number ($decimal)(10,2)
| Y |
|
| Cena brutto (netto + VAT) | number ($decimal)(10,2)
| Y | |
| VAT | number ($decimal)(10,2)
| Y | |
| Cena promocyjna produktu | object | O |
|
| Cena netto | number ($decimal)(10,2)
| Y |
|
| Cena brutto (netto + VAT) | number ($decimal)(10,2)
| Y | |
| VAT | number ($decimal)(10,2)
| Y | |
| Obiekt służący do przekazania najniższej ceny produktu z ostatnich 30 dni. Wymagane w celu obsłużenia dyrektywy Omibus. Obiekt należy przekazać obligatoryjnie w przypadku, gdy została przekazania cena promocyjna produktu (obiekt promo_price) oraz został przekazany kod promocyjny z "regulation_type": "OMNIBUS". | object | O |
|
| Cena netto | number ($decimal)(10,2)
| Y |
|
| Cena brutto (netto + VAT) | number ($decimal)(10,2)
| Y | |
| VAT | number ($decimal)(10,2)
| Y | |
| Obiekt do przekazania informacji o ilości produktu | object | Y |
|
| Ilość produktu | number ($decimal)
| Y |
|
| Typ quantity. Dostępne wartości: [ DECIMAL, INTEGER ]
| string | Y |
|
| Jednostka ilości produktu | string | O |
|
| Ilość dostępnego produktu sklepie | number ($decimal)
| O |
|
| Minimalna ilość produktu jaką klient może zamówić np. przy jednym zamówieniu | number ($decimal)
| O |
|
| Maksymalna ilość produktu jaką klient może zamówić np. przy jednym zamówieniu | number ($decimal)
| O |
|
| Wartość skoku ilości w przypadku zwiększenia/zmniejszenia ilości produktu przez klienta (np. 0,1 lub 0,5 lub 0,01) | number ($decimal) | O |
|
| Obiekt służący do określenia atrybutów produktu | array | O |
|
| Nazwa atrybutu | string | Y |
|
| Wartość atrybutu | string | Y |
|
| Obiekt służący do przekazania informacji o dostępnych formach dostawy dla produktu. Jeśli brak obiektu delivery_product oznacza że dostawa dostępna wszystkimi typami | array | O |
|
| Typ dostawy | string | O |
|
| Flaga informująca czy typ dostawy dostępna | boolean | O |
|
| Obiekt służący do przekazania listy produktów sugerowanych dla danego koszyka, które klient może dodać z poziomu aplikacji Inpost Pay | array | O |
|
| Identyfikator produktu nadany przez merchanta | string | Y |
|
| Kategoria produktu nadana przez merchanta | string | O |
|
| Ean | string | O |
|
| Nazwa produktu | string | Y |
|
| Opis produktu | string | O |
|
| Link do produktu na stronie merchanta | string | O |
|
| Url do zdjęcia produktu. Preferowany format: png, jpg (rekomendacja: png bez tła) | string |
|
|
| Obiekt do przekazania dodatkowych zdjęć produktu (lista) | object | O |
|
| zdjęcie produktu. Preferowany rozmiar 360 x 352 | string | Y |
|
| zdjęcie produktu. Preferowany rozmiar 360 x 504 | string | Y |
|
| Cena podstawowa z produkt | object | Y |
|
| Cena netto | number ($decimal)(10,2) | Y |
|
| Cena brutto (netto + VAT) | number ($decimal)(10,2) | Y | |
| VAT | number ($decimal)(10,2) | Y | |
| Cena promocyjna produktu | object | O |
|
| Cena netto | number ($decimal)(10,2) | Y |
|
| Cena brutto (netto + VAT) | number ($decimal)(10,2) | Y | |
| VAT | number ($decimal)(10,2) | Y | |
| Obiekt służący do przekazania najniższej ceny produktu z ostatnich 30 dni. Wymagane w celu obsłużenia dyrektywy Omibus. Obiekt należy przekazać obligatoryjnie w przypadku, gdy została przekazania cena promocyjna produktu (obiekt promo_price) oraz został przekazany kod promocyjny z "regulation_type": "OMNIBUS". | object | O |
|
| Cena netto | number ($decimal)(10,2) | Y |
|
| Cena brutto (netto + VAT) | number ($decimal)(10,2) | Y | |
| VAT | number ($decimal)(10,2) | Y | |
| Obiekt do przekazania informacji o ilości produktu | object | Y |
|
| Ilość produktu | number ($decimal)
| Y |
|
| Typ quantity. Dostępne wartości: [ DECIMAL, INTEGER ]
| string | Y |
|
| Jednostka ilości produktu | string | O |
|
| Ilość dostępnego produktu sklepie | number ($decimal) | O |
|
| Minimalna ilość produktu jaką klient może zamówić np. przy jednym zamówieniu | number ($decimal) | O |
|
| Maksymalna ilość produktu jaką klient może zamówić np. przy jednym zamówieniu | number ($decimal) | O |
|
| Wartość skoku ilości w przypadku zwiększenia/zmniejszenia ilości produktu przez klienta (np. 0,1 lub 0,5 lub 0,01) | number ($decimal) | O |
|
| Obiekt służący do określenia atrybutów produktu | array | O |
|
| Nazwa atrybutu | string | Y |
|
| Wartość atrybutu | string | Y | |
| Obiekt służący do przekazania informacji o dostępnych formach dostawy dla produktu. Jeśli brak obiektu delivery_product oznacza że dostawa dostępna wszystkimi typami | array | O |
|
| Typ dostawy | string | O |
|
| Flaga informująca czy typ dostawy dostępna | boolean | O |
|
| Flaga informująca czy po dodaniu produktu sugerowanego do koszyka, klient będzie miał darmową dostawę. W przypadku, gdy if_delivery_free=true jest na danym produkcie sugerowanym, klientowi zostanie zaprezentowany odpowiedni komunikat na tym produkcie. | boolean | O |
|
| Obiekt służący do przekazania listy zgód dla danego koszy | array | Y |
|
| Id zgody nadawane przez merchanta | string | Y |
|
| Link przekierowujący do pełnej treści zgodny np. do strony merchnata | string | Y |
|
| Label do linku przekazanego w consent_link. | string | O |
|
| Obiekt służący do przekazania dodatkowego linku do zgody/regulaminu | object | O |
|
| Id zgody nadawane przez merchanta | string | O |
|
| Link przekierowujący do pełnej treści zgodny np. do strony merchanta | string | O |
|
| Label do linku przekazanego w consent_link. | string | O |
|
| Opis zgody, nie więcej niż 500 znaków | string | Y |
|
| Wersja zgody | string | Y |
|
| Typ zgody. Dostępne wartości: Enum: [OPTIONAL, REQUIRED_ONCE, REQUIRED_ALWAYS ] OPTIONAL – Zgoda opcjonalna REQUIRED_ONCE - wymagana jednorazowo. Zgoda o takim typie i wersji będzie zapisana w profilu użytkownika, z informacją, że klient wyraził zgodę i w przypadku kolejnych koszyków będzie domyślnie zaznaczona. REQUIRED_ALWAYS - wymagana zawsze. Zgoda o takim typie i wersji nie jest zapisywana w profilu użytkownika. Klient za każdym razem musi wyrazić zgodę. | string | Y |
|
GET /v1/izi/baskets
Przykładowy response
{
"baskets": [
{
"basket_id": "3456789",
"creation_date": "2023-11-15T07:42:57.218Z",
"update_date": "2023-11-15T07:42:57.213Z",
"summary": {
"basket_base_price": {
"net": 13.98,
"gross": 17.2,
"vat": 3.22
},
"basket_final_price": {
"net": 13.98,
"gross": 17.2,
"vat": 3.22
},
"currency": "PLN",
"basket_expiration_date": "2023-11-19T23:00:00.000Z",
"payment_type": [
"CARD",
"CARD_TOKEN",
"GOOGLE_PAY",
"APPLE_PAY",
"BLIK_CODE",
"BLIK_TOKEN",
"PAY_BY_LINK"
]
},
"delivery": [
{
"delivery_type": "APM",
"delivery_date": "2023-11-17T11:00:00.000Z",
"delivery_price": {
"net": 10.56,
"gross": 12.99,
"vat": 2.43
}
},
{
"delivery_type": "COURIER",
"delivery_date": "2023-11-17T11:00:00.000Z",
"delivery_price": {
"net": 10.56,
"gross": 12.99,
"vat": 2.43
}
}
],
"products": [
{
"product_id": "34567",
"ean": "678905432",
"product_name": "Cymbałki",
"product_description": "Dzwonki/cymbałki szkolne 12 tonowe z 2 pałeczkami w zestawie.",
"product_link": "https://p/cymbalki-dzwonki-szkolne-34567/",
"product_image": "https://o/cymbalki-dzwonki-szkolne34567.jpg",
"base_price": {
"net": 13.98,
"gross": 17.2,
"vat": 3.22
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 92,
"max_quantity": 92
}
}
],
"related_products": [
{
"product_id": "999",
"product_name": "Street Fire Mercedes-Benz",
"product_link": "https://p/street-fire-mercedes-benz-143/",
"product_image": "https://o/street-fire-mercedes-benz-143.jpg",
"base_price": {
"net": 59.53,
"gross": 73.22,
"vat": 13.69
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 2,
"max_quantity": 2
}
},
{
"product_id": "7643",
"product_name": "Golf",
"product_link": "https://p/golf-mk1-7643/",
"product_image": "https://o/golf-mk1-7643.jpg",
"base_price": {
"net": 54.1,
"gross": 66.54,
"vat": 12.44
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 9,
"max_quantity": 9
}
},
{
"product_id": "768",
"product_name": "Lamborghini yellow",
"product_link": "https://p/lamborghini-yellow-118/",
"product_image": "https://o/lamborghini-yellow-118.jpg",
"base_price": {
"net": 116.45,
"gross": 143.23,
"vat": 26.78
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 4,
"max_quantity": 4
}
},
{
"product_id": "324",
"product_name": "Figurka Gołąb",
"product_link": "https://p/golab-a-324/",
"product_image": "https://o/golab-a-324.jpg",
"base_price": {
"net": 22.37,
"gross": 27.52,
"vat": 5.15
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 19,
"max_quantity": 19
}
},
{
"product_id": "543",
"product_name": "Zestaw naczyń",
"product_link": "https://p/zestaw-naczyn-543/",
"product_image": "https://o/zestaw-naczyn-543.jpg",
"base_price": {
"net": 22.08,
"gross": 27.16,
"vat": 5.08
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 3,
"max_quantity": 3
}
},
{
"product_id": "678",
"product_name": "Alfa Romeo",
"product_link": "https://p/alfa-romeo-green-678/",
"product_image": "https://o/alfa-romeo-green-678.jpg",
"base_price": {
"net": 43.61,
"gross": 53.64,
"vat": 10.03
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 5,
"max_quantity": 5
}
},
{
"product_id": "111",
"product_name": "Lamborghini white ",
"product_link": "https://p/lamborghini-white-111/",
"product_image": "https://o/lamborghini-white-111.jpg",
"base_price": {
"net": 136.02,
"gross": 167.3,
"vat": 31.28
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 5,
"max_quantity": 5
}
},
{
"product_id": "909",
"product_name": "Porsche green",
"product_link": "https://p/porsche-909/",
"product_image": "https://o/porsche-909.jpg",
"base_price": {
"net": 49.31,
"gross": 60.65,
"vat": 11.34
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 2,
"max_quantity": 1
}
}
],
"consents": [
{
"consent_id": "11",
"consent_link": "https://regulamin/newsletter/",
"consent_description": "Regulamin usługi Newsletter",
"consent_version": "45677",
"requirement_type": "OPTIONAL"
},
{
"consent_id": "12",
"consent_link": "https://regulamin/klienci2023/",
"consent_description": "Informacja o przetwarzaniu danych osobowych",
"consent_version": "4567",
"requirement_type": "REQUIRED_ALWAYS"
},
{
"consent_id": "13",
"consent_link": "https://regulamin/regulamin-2023/",
"consent_description": "Regulamin zakupów w sklepie internetowym",
"consent_version": "6543",
"requirement_type": "REQUIRED_ALWAYS"
}
]
},
{
"basket_id": "111111",
"creation_date": "2023-11-15T00:21:18.372Z",
"update_date": "2023-11-15T00:21:18.368Z",
"summary": {
"basket_base_price": {
"net": 48.7,
"gross": 51.14,
"vat": 2.44
},
"basket_final_price": {
"net": 48.7,
"gross": 51.14,
"vat": 2.44
},
"currency": "PLN",
"basket_expiration_date": "2023-11-19T23:00:00.000Z",
"payment_type": [
"CARD",
"CARD_TOKEN",
"GOOGLE_PAY",
"APPLE_PAY",
"BLIK_CODE",
"BLIK_TOKEN",
"PAY_BY_LINK"
]
},
"delivery": [
{
"delivery_type": "APM",
"delivery_date": "2023-11-17T11:00:00.000Z",
"delivery_price": {
"net": 10.56,
"gross": 12.99,
"vat": 2.43
}
},
{
"delivery_type": "COURIER",
"delivery_date": "2023-11-17T11:00:00.000Z",
"delivery_price": {
"net": 10.56,
"gross": 12.99,
"vat": 2.43
}
}
],
"products": [
{
"product_id": "34556",
"ean": "01234567890",
"product_name": "Czwarte skrzydło",
"product_description": "Opis produktu",
"product_link": "https://b/czwarte-skrzydlo-3456/",
"product_image": "https://o/czwarte-skrzydlo-3456.jpg",
"base_price": {
"net": 48.7,
"gross": 51.14,
"vat": 2.44
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 100,
"max_quantity": 100
}
}
],
"related_products": [
{
"product_id": "8765",
"product_name": "Czegoś tu brakuje...",
"product_link": "https://b/czegos-tu-brakuje-8765/",
"product_image": "https://o/czegos-tu-brakuje-8765.jpg",
"base_price": {
"net": 29.93,
"gross": 31.43,
"vat": 1.5
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 16,
"max_quantity": 16
}
},
{
"product_id": "7777",
"product_name": "Opowiadania",
"product_link": "https://b/opowiadania-7777/",
"product_image": "https://o/opowiadania-7777.jpg",
"base_price": {
"net": 16.08,
"gross": 16.88,
"vat": 0.8
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 100,
"max_quantity": 100
}
},
{
"product_id": "9878",
"product_name": "Bajki",
"product_link": "https://b/bajki-tw-9878/",
"product_image": "https://o/bajki-tw-9878.jpg",
"base_price": {
"net": 36.77,
"gross": 38.61,
"vat": 1.84
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 9,
"max_quantity": 9
}
},
{
"product_id": "6543",
"product_name": "Baśnie",
"product_link": "https://b/basnie-tw-6543/",
"product_image": "https://o/basnie-tw-6543.jpg",
"base_price": {
"net": 18,
"gross": 18.9,
"vat": 0.9
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 87,
"max_quantity": 87
}
},
{
"product_id": "87654",
"product_name": "Nowy tytuł",
"product_link": "https://b/nowy-tytul-87654/",
"product_image": "https://o/nowy-tytul-87654.jpg",
"base_price": {
"net": 46.22,
"gross": 48.53,
"vat": 2.31
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 2,
"max_quantity": 2
}
},
{
"product_id": "7654",
"product_name": "Poradnik",
"product_link": "https://b/poradnik-7654/",
"product_image": "https://o/poradnik-7654.jpg",
"base_price": {
"net": 46.09,
"gross": 48.39,
"vat": 2.3
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 100,
"max_quantity": 100
}
},
{
"product_id": "45678",
"product_name": "Zadania",
"product_link": "https://b/zadania-45678/",
"product_image": "https://o/zadania-45678.jpg",
"base_price": {
"net": 26.67,
"gross": 28,
"vat": 1.33
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 8,
"max_quantity": 8
}
},
{
"product_id": "45670",
"product_name": "Codziennik",
"product_link": "https://b/codziennik-45670/",
"product_image": "https://codziennik-45670.jpg",
"base_price": {
"net": 18.52,
"gross": 19.45,
"vat": 0.93
},
"quantity": {
"quantity": 1,
"quantity_type": "INTEGER",
"quantity_unit": "sztuka",
"available_quantity": 2,
"max_quantity": 1
}
}
],
"consents": [
{
"consent_id": "120",
"consent_link": "https://regulamin/newsletter/",
"consent_description": "Regulamin usługi Newsletter",
"consent_version": "3456",
"requirement_type": "OPTIONAL"
},
{
"consent_id": "121",
"consent_link": "https://regulamin/klienci2023/",
"consent_description": "Informacja o przetwarzaniu danych osobowych",
"consent_version": "123456",
"requirement_type": "REQUIRED_ALWAYS"
},
{
"consent_id": "123",
"consent_link": "https://regulamin/regulamin-2023/",
"consent_description": "Regulamin zakupów w sklepie internetowym",
"consent_version": "34567",
"requirement_type": "REQUIRED_ALWAYS"
}
]
},
],
"page_size": 100,
"total_items": 2,
"page_index": 0
}
Przykład implementacji w PHP
Podanie kodu -
W pliku implementacjaKlienta.txt została dodana tylko funkcja getBaskets.
/**
* Client symfony implementation used for communication between Merchant and InPost Pay application.
*
* @param InpostPayBearerServiceInterface $inpostPayBearerService <p> Bearer service interface,
* with contains creating bearer token which is required for communication with Inpost Pay </p>
*
*/
final class InpostPayClient implements InpostPayClientInterface
{
private ClientInterface $client;
private InpostPayURLCreatorInterface $URLCreator;
private InpostPayBearerServiceInterface $bearerService;
public function __construct(
ClientInterface $client,
InpostPayURLCreatorInterface $URLCreator,
InpostPayBearerServiceInterface $bearerService
) {
$this->client = $client;
$this->URLCreator = $URLCreator;
$this->bearerService = $bearerService;
}
public function getBaskets(int $pageIndex = null, int $pageSize = null): BasketsResponse
{
$path = 'baskets';
$uri = (new Uri($this->buildUri($path)))
->withQuery(Psr7\Query::build(['page_index' => $pageIndex, 'page_size' => $pageSize]));
$request = new Request(
'GET',
$uri,
$this->provideDefaultClientHeaders()
);
try {
$response = $this->client->sendRequest($request);
$content = $response->getBody()->getContents();
/**
* @var BasketsResponseArray $data
*/
$data = json_decode($content, true, 512, JSON_THROW_ON_ERROR);
return BasketsResponse::fromArray($data);
} catch (\Throwable $throwable) {
throw InpostPayGetBasketsException::createResponseException($throwable);
}
}
public function getBasketBinding(string $basketId, string $browserId = null): BindingBasket
{
$path = sprintf('basket/%s/binding', $basketId);
$uri = (new Uri($this->buildUri($path)))
->withQuery(Psr7\Query::build(['browser_id' => $browserId]));
$request = new Request(
'GET',
$uri,
$this->provideDefaultClientHeaders()
);
try {
$response = $this->client->sendRequest($request);
$content = $response->getBody()->getContents();
/**
* @var BindingBasketArray $data
*/
$data = json_decode($content, true, 512, JSON_THROW_ON_ERROR);
return BindingBasket::fromArray($data);
} catch (\Throwable $throwable) {
throw InpostPayGetBasketBindingException::createResponseException($throwable);
}
}
public function postBasketBinding(string $basketId, BasketBindingRequest $requestBody): ?QrCodeData
{
if (BindingMethod::PHONE()->equals($requestBody->getBindingMethod()) && !$requestBody->getPhoneNumber()) {
throw InpostPayPostBasketBindingException::createNoPhoneForPhoneBindingMethodException();
}
$path = sprintf('basket/%s/binding', $basketId);
$uri = new Uri($this->buildUri($path));
/** @var string $body */
$body = json_encode($requestBody);
$request = new Request(
'POST',
$uri,
$this->provideDefaultClientHeaders(),
$body
);
try {
$response = $this->client->sendRequest($request);
$statusCode = $response->getStatusCode();
$content = $response->getBody()->getContents();
if (HttpResponseStatus::ACCEPTED()->getValue() === $statusCode) {
return null;
}
if (HttpResponseStatus::OK()->getValue() === $statusCode) {
/**
* @var QrCodeDataArray $data
*/
$data = json_decode($content, true, 512, JSON_THROW_ON_ERROR);
return QrCodeData::fromArray($data);
}
} catch (\Throwable $throwable) {
throw InpostPayPostBasketBindingException::createResponseException($throwable);
}
throw InpostPayPostBasketBindingException::createBadStatusCodeException($statusCode, $content);
}
public function putBasket(string $basketId, Basket $basket): InpostBasketId
{
$path = sprintf('basket/%s', $basketId);
$uri = new Uri($this->buildUri($path));
/** @var string $body */
$body = json_encode($basket);
$request = new Request(
'PUT',
$uri,
$this->provideDefaultClientHeaders(),
$body
);
try {
$response = $this->client->sendRequest($request);
$content = $response->getBody()->getContents();
/**
* @var array{inpost_basket_id: string} $responseData
*/
$responseData = json_decode($content, true, 512, JSON_THROW_ON_ERROR);
return InpostBasketId::fromArray($responseData);
} catch (\Throwable $throwable) {
throw InpostPayPutBasketException::createResponseException($throwable);
}
}
public function deleteBasketBinding(string $basketId, bool $ifBasketRealized = null): void
{
$path = sprintf('basket/%s/binding', $basketId);
$uri = (new Uri($this->buildUri($path)))
->withQuery(Psr7\Query::build(['if_basket_realized' => $ifBasketRealized]));
$request = new Request(
'DELETE',
$uri,
$this->provideDefaultClientHeaders()
);
try {
$response = $this->client->sendRequest($request);
$statusCode = $response->getStatusCode();
$content = $response->getBody()->getContents();
} catch (\Throwable $throwable) {
throw InpostPayDeleteBasketBindingException::createResponseException($throwable);
}
if (HttpResponseStatus::NO_CONTENT()->getValue() === $statusCode) {
return;
}
throw InpostPayDeleteBasketBindingException::createBadStatusCodeException($statusCode, $content);
}
public function deleteBrowserBinding(string $browserId): void
{
$path = sprintf('browser/%s/binding', $browserId);
$uri = new Uri($this->buildUri($path));
$request = new Request(
'DELETE',
$uri,
$this->provideDefaultClientHeaders()
);
try {
$response = $this->client->sendRequest($request);
$statusCode = $response->getStatusCode();
$content = $response->getBody()->getContents();
} catch (\Throwable $throwable) {
throw InpostPayDeleteBrowserBindingException::createResponseException($throwable);
}
if (HttpResponseStatus::NO_CONTENT()->getValue() === $statusCode) {
return;
}
throw InpostPayDeleteBrowserBindingException::createBadStatusCodeException($statusCode, $content);
}
public function getSigningKey(string $version): SigningKeyResponse
{
$path = sprintf('signing-keys/public/%s', $version);
$uri = new Uri($this->buildUri($path));
$request = new Request(
'GET',
$uri,
$this->provideDefaultClientHeaders()
);
try {
$response = $this->client->sendRequest($request);
$statusCode = $response->getStatusCode();
$content = $response->getBody()->getContents();
if (HttpResponseStatus::OK()->getValue() === $statusCode) {
/**
* @var SigningKeyResponseArray $data
*/
$data = json_decode($content, true, 512, JSON_THROW_ON_ERROR);
return SigningKeyResponse::fromArray($data);
}
} catch (\Throwable $throwable) {
throw InpostPayGetSigningKeyException::createResponseException($throwable);
}
throw InpostPayGetSigningKeyException::createBadStatusCodeException($statusCode, $content);
}
public function getSigningKeys(): SigningKeysResponse
{
$path = 'signing-keys/public';
$uri = new Uri($this->buildUri($path));
$request = new Request(
'GET',
$uri,
$this->provideDefaultClientHeaders()
);
try {
$response = $this->client->sendRequest($request);
$statusCode = $response->getStatusCode();
$content = $response->getBody()->getContents();
if (HttpResponseStatus::OK()->getValue() === $statusCode) {
/**
* @var SigningKeysResponseArray $data
*/
$data = json_decode($content, true, 512, JSON_THROW_ON_ERROR);
return SigningKeysResponse::fromArray($data);
}
} catch (\Throwable $throwable) {
throw InpostPayGetSigningKeysException::createResponseException($throwable);
}
throw InpostPayGetSigningKeysException::createBadStatusCodeException($statusCode, $content);
}
/**
* @return array{
* Authorization: string,
* Content-Type: string
* }
*
* @throws InpostPayEndpointException
*/
private function provideDefaultClientHeaders(): array
{
return [
'Authorization' => sprintf('Bearer %s', $this->bearerService->getBearerToken()),
'Content-Type' => 'application/json',
];
}
private function buildUri(string $path): string
{
return sprintf(
'%s%s',
$this->URLCreator->create()->getUrl(),
$path
);
}
}
W SDK.zip zawiera się kod zawierający obiekt requestu oraz response endpointu.