- Created by Joanna Wołosz , last modified on Oct 31, 2024
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 22 Current »
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 | object | 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 | object | 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
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.
- No labels