Aktualizacja lub dodanie koszyka

Artykuł zawiera opis metody wykorzystywanej do aktualizacji koszyka wraz z przykładem implementacji metody w języku PHP.

Opis metody

Metoda służąca do aktualizacji koszyka w aplikacji InPost Pay. W przypadku, gdy klient korzysta z przeglądarki zaufanej oraz posiada koszyk niepowiązany z aplikacją InPost Pay metoda wykorzystywana również do utworzenia i powiązania koszyka z InPost Pay.

Parameters 
 

Nazwa pola 

Opis  

Typ 

Wymagalność 

Dodatkowe uwagi 

basket_id 

Unikalny identyfikator koszyka nadawany przez merchanta 

string 

 

 

Request  

Nazwa pola 

Opis  

Typ 

Wymagalność 

Dodatkowe uwagi 

browser_id

Unikalny identyfikator przeglądarki zaufanej nadawany przez aplikacje Inpost. Pole wykorzystywane tylko w przypadku, gdy klient korzysta z przeglądarki zaufanej i nie ma powiązanego koszyka. W takiej sytuacji po wybraniu „Kup z Inpost Pay” powinna być wywołana metoda PUT z parametrem browser_id. 

string 

"browser_id":"2d387d15-d4fe-43f8-85dc-32d46cfc3b53"

summary

Obiekt służący do przekazania podstawowych danych o koszyku 

object 

 

summary.basket_base_price

Obiekt służący do przekazania ceny podstawowej za koszyk bez kosztów dostawy 

object 

 

summary.basket_base_price.net

Cena netto 

Number ($decimal)(10,2) 

 

"summary":{"basket_base_price":{"net":"250.00","gross":"307.50","vat":"57.5"}}

summary.basket_base_price.gross

Cena brutto (netto + VAT) 

Number ($decimal)(10,2) 

 

summary.basket_base_price.vat

VAT 

Number ($decimal)(10,2) 

 

summary.basket_final_price

Obiekt służący do przekazania ostatecznej ceny koszyka z uwzględnioną promocją i kodem rabatowym bez kosztów dostawy.
Wartość obniżki na produktach wynikająca z zastosowania kodu widoczna w podsumowaniu koszyka będzie różnicą pomiędzy promo_price a final_price lub base_price a final_price w przypadku gdy produkty nie są w promocji.

object 

 

summary.basket_final_price.net

Cena netto 

Number ($decimal)(10,2) 

 

"basket_final_price":{"net":"220.00","gross":"270.60","vat":"50.60"}

summary.basket_final_price.gross

Cena brutto (netto + VAT) 

Number ($decimal)(10,2) 

 

summary.basket_final_price.vat

VAT 

Number ($decimal)(10,2) 

 

summary.basket_promo_price

Obiekt służący do przekazania ceny koszyka z uwzględnioną promocją na produkt, ale bez zastosowania kodu rabatowego i bez kosztów dostawy.

object 

 

summary.basket_promo_price.net

Cena netto 

Number ($decimal)(10,2) 

 

"basket_promo_price":{"net":"220.00","gross":"270.60","vat":"50.60"}

summary.basket_promo_price.gross

Cena brutto (netto + VAT) 

Number ($decimal)(10,2) 

 

summary.basket_promo_price.vat

VAT 

Number ($decimal)(10,2) 

 

summary.currency

Waluta koszyka. Obecnie obsługiwana tylko waluta PLN 

string 

"currency":"PLN"

summary.basket_expiration_date

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) 

"basket_expiration_date":"2023-09-13T07:40:53.000Z" 

summary.basket_additional_information

Pole służy do przekazania dodatkowych informacji o koszyku, które z punktu widzenia merchanta mogą być istotne dla klienta 

string 

"basket_additional_information":"Zamów już dziś, a otrzymasz kod promocyjny na przyszłe zakupy" 

summary.payment_type

Preferowane formy płatności za koszyk. 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ą merchnata. 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 ] 

object 

"payment_type":["CARD","CARD_TOKEN","APPLE_PAY","BLIK_CODE","BLIK_TOKEN","PAY_BY_LINK","SHOPPING_LIMIT","DEFERRED_PAYMENT","GOOGLE_PAY"],

delivery

Obiekt służący do przekazania informacji o preferowanych formach dostawy dla danego koszyka 

array 

 

delivery.delivery_type

Forma dostawy. Enum:[ APM, COURIER ].  

APM – paczkomat, COURIER – kurier Inpost 

string 

"delivery_type":"APM"

delivery.delivery_date

Sugerowana data dostawy 

string($date-time) 

"delivery_date":"2023-09-14T12:00:00.000Z"

delivery.delivery_options

Obiekt służący do przekazania dodatkowych opis dostawy.  Obecnie dostępne dwie dodatkowe opcje dostawy: 

PWW – paczka w weekend  

COD – płatność przy odbierze. W przypadku, gdy dla danego koszyk w payment_type zostanie przekazana wartość CASH_ON_DELIVERY, obligatoryjnie należy przekazać COD jako dodatkową opcje dostawy 

 

 array

 

delivery.delivery_options.delivery_name

Nazwa dodatkowej opcji dostawy 

string 

"delivery_name": "Paczka w Weekend"

delivery.delivery_options.delivery_code_value

Kod dodatkowej opcji dostawy. Obecnie dostępne dwa kody: 

PWW – paczka w weekend  

COD – płatność przy odbierze 

 

string 

"delivery_code_value": "PWW"

delivery.delivery_options.delivery_option_price

Obiekt służący do przekazania informacji o koszcie dodatkowych opcji dostawy 

object 

 

delivery.delivery_options.delivery_option_price.net

Cena netto 

Number ($decimal)(10,2) 

 

"delivery_option_price ":{"net":"10.00","gross":"12.30","vat":"2.30"}

delivery.delivery_options.delivery_option_price.gorss

Cena brutto (netto + VAT) 

Number ($decimal)(10,2) 

 

delivery.delivery_options.delivery_option_price.vat

VAT 

Number ($decimal)(10,2) 

 

delivery.delivery_price

Obiekt służący do przekazania informacji o koszcie dostawy  

object 

 

delivery.delivery_price.net

Cena netto 

Number ($decimal)(10,2) 

 

"delivery_price":{"net":"10.00","gross":"12.30","vat":"2.30"}

delivery.delivery_price.gorss

Cena brutto (netto + VAT) 

Number ($decimal)(10,2) 

 

delivery.delivery_price.vat

VAT 

Number ($decimal)(10,2) 

 

delivery.free_delivery_minimum_gross_price

Minimalna wartość koszyka od jakiej koszt dostawy będzie wynosił 0 PLN 

Number ($decimal)(10,2) 

 

"free_delivery_minimum_gross_price": "100.00"

promo_codes

Lista kodów promocyjnych zastosowanych na koszyku 

array 

 

promo_codes.name

Nazwa kodu. W kolejnej wersji aplikacji pole nie wymagalne 

string 

"name": "Promocja 5%"

promo_codes.promo_code_value

Kod promocyjny 

string 

"promo_code_value": "INPOST10"

products

Lista do przekazania informacji o produktach w koszyku 

array 

 

products.product_id

Identyfikator produktu nadany przez merchanta 

string 

"product_id":26

products.product_category

Kategoria produktu nadana przez merchanta 

string 

"product_category":20

products.ean

Ean 

string 

"ean":"0"

products.product_name

Nazwa produktu  

string 

"product_name":"Plecak washpapa"

 

products.product_description

Opis produktu 

string 

"product_description":" \r\n\r\nCzasem masz ochotę rzucić wszystko, spakować się i wyjechać w Bieszczady? Jest to dobry plan na wakacje. A w ciągu roku po prostu odkrywaj swoje miasto na nowo.\r\n\r\nUdana eksploracja nie obędzie się bez solidnego plecaka ze zwijanym zamknięciem i uszytego z wysokiej jakości materiałów, takiego jak nasz.\r\n\r\nBawełniane pasy zapewnią wygodę noszenia, a washpapa wyrazi Twoje przywiązanie do natury. Pamiętaj! Za każdą przygodą stoi dobry plecak."

products.product_link

Link do produktu na stronie merchanta 

string 

"product_link":"https://test.outofthebox.pl/product/plecak-washpapa/"

products.product_image

Link do zdjęcia produktu. Preferowane formaty: png, jpg (rekomendacja: png bez tła)  

string 

"product_image":"https://test.outofthebox.pl/img/2022/10/INPOST_aranzacje-z-modelami25-1.jpg"

Preferowane format: png, jpg (rekomendacja: png bez tła)

products.additional_product_images

Obiekt do przekazania dodatkowych zdjęć produktu (lista)

object

O

-

products.additional_product_images. small_size

Zdjęcie produktu. Preferowany rozmiar 360 x 352

string

Y

-

products.additional_product_images. normal_size

Zdjęcie produktu. Preferowany rozmiar 360 x 504

string

Y

-

products.base_price

Cena podstawowa z produkt 

object 

 

products.base_price.net

Cena netto 

Number ($decimal)(10,2) 

"base_price":{"net":"161.79","gross":"199.00","vat":"37.21"}

products.base_price.gross

Cena brutto (netto + VAT) 

Number ($decimal)(10,2) 

products.base_price.vat

VAT 

Number ($decimal)(10,2) 

products.promo_price 

Cena promocyjna produktu 

object 

 

products.promo_price.net

Cena netto 

number ($decimal)(10,2) 

"promo_price":{"net":"160.98","gross":"198.00","vat":"37.02"}

products.promo_price.gorss

Cena brutto (netto + VAT) 

number ($decimal)(10,2) 

products.promo_price.vat

VAT 

Number ($decimal)(10,2) 

products.lowest_price

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

object 

 

products.lowest_price.net

Cena netto 

number ($decimal)(10,2) 

"lowest_price ":{"net":"160.98","gross":"198.00","vat":"37.02"}

products.lowest_price.gorss 

Cena brutto (netto + VAT) 

number ($decimal)(10,2) 

products.lowest_price.vat

VAT 

number ($decimal)(10,2) 

products.quantity

Obiekt do przekazania informacji o ilości produktu 

object 

 

products.quantity.quantity

Ilość produktu 

number ($decimal) 

"quantity":1

products.quantity.quantity_type

Typ quantity. Dostępne wartości: [ DECIMAL, INTEGER ] 

Jeżeli quantity_type produktu to INTEGER, wtedy Merchant przesyła cenę za 1 sztukę produktu. Jeżeli quantity_type produktu to DECIMAL, wtedy Merchant przesyła cenę za wybraną ilość produktu.  

  • Przykład 1) Mamy 5 sztuk koszul w cenie 10 zł za sztukę. W takim przypadku quantity_type, to INTEGER i cena produktu wynosi 10 zł.

  • Przykład 2) Mamy 0,35 kg mąki w cenie 5 zł. W takim przypadku quantity_type, to DECIMAL i cena produktu wynosi 5 zł.

string 

"quantity_type":"INTEGER"

products.quantity.quantity_unit

Jednostka ilości produktu 

string 

"quantity_unit":"pcs"

products.quantity.available_quantity

Ilość dostępnego produktu sklepie 

number ($decimal) 

"available_quantity":26

products.quantity.min_quantity 

Minimalna ilość produktu jaką klient może zamówić np. przy jednym zamówieniu 

number ($decimal) 

 

"min_quantity": 2

products.quantity.max_quantity

Maksymalna ilość produktu jaką klient może zamówić np. przy jednym zamówieniu 

number ($decimal) 

"max_quantity": 26

products.quantity.quantity_jump

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

"quantity_jump": 0.5

products.product_attributes

Obiekt służący do określenia atrybutów produktu 

array 

 

products.product_attributes.attribute_name

Nazwa atrybutu 

string 

"product_attributes":[{"attribute_name":"Wymiary/Pojemność","attribute_value":"54 cm x 38 cm x 10 cm"},{"attribute_name":"Materiał","attribute_value":"Washable paper standard + kodura + pasy bawełniane tkane"}]

products.product_attributes.attribute_value

Wartość atrybutu 

string 

products.variants

Obiekt obecnie nie wykorzystywany. Funkcjonalność będzie wdrażana w kolejnych wersjach aplikacji. 

object 

 

products.variants.variant_id

Id wariantu 

string 

 

products.variants.variant_name

Nazwa wariantu 

string 

 

products.variants.variant_description

Opis szczegółowy wariantu 

string 

 

products.variants.variant_type

Typ wariantu 

string 

 

products.variants.variant_values

Wartość wariantu 

string 

 

products.delivery_product

Obiekt służący do przekazania informacji o dostępnych formach dostawy dla produktu. Jeśli brak obiektu delivery_product, to oznacza że dostawa dostępna wszystkimi typami

object

O

 

products.delivery_product.delivery_type

Typ dostawy

string

O

 

products.delivery_product.if_delivery_available

Flaga informująca czy typ dostawy jest dostępny.

boolean

O

 

related_products

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 

 

related_products.product_id

Identyfikator produktu nadany przez merchanta 

string 

"product_id":26

related_products.product_category

Kategoria produktu nadana przez merchanta 

string 

"product_category":20

related_products.ean 

Ean 

string 

"ean":"0"

related_products.product_name

Nazwa produktu  

string 

"product_name":"Plecak washpapa"

related_products.product_description

Opis produktu 

string 

"product_description":" \r\n\r\nCzasem masz ochotę rzucić wszystko, spakować się i wyjechać w Bieszczady? Jest to dobry plan na wakacje. A w ciągu roku po prostu odkrywaj swoje miasto na nowo.\r\n\r\nUdana eksploracja nie obędzie się bez solidnego plecaka ze zwijanym zamknięciem i uszytego z wysokiej jakości materiałów, takiego jak nasz.\r\n\r\nBawełniane pasy zapewnią wygodę noszenia, a washpapa wyrazi Twoje przywiązanie do natury. Pamiętaj! Za każdą przygodą stoi dobry plecak."

related_products.product_link

Link do produktu na stronie merchanta 

string 

"product_link":"https://test.outofthebox.pl/product/plecak-washpapa/" 

related_products.product_image

Link do zdjęcia produktu. Preferowane formaty: png, jpg (rekomendacja: png bez tła)  

string 

 O

"product_image":"https://test.outofthebox.pl/img/2022/10/INPOST_aranzacje-z-modelami25-1.jpg"

Preferowane format: png, jpg (rekomendacja: png bez tła) 

related_products.additional_product_images

Obiekt do przekazania dodatkowych zdjęć produktu (lista)

object

O

-

related_products.additional_product_images. small_size

Zdjęcie produktu. Preferowany rozmiar 360 x 352

string

Y

-

related_products.additional_product_images. normal_size

Zdjęcie produktu. Preferowany rozmiar 360 x 504

string

Y

-

related_products.base_price

Cena podstawowa z produkt 

object 

 

 

related_products.base_price.net

Cena netto 

number ($decimal)(10,2) 

 

"base_price":{"net":"161.79","gross":"199.00","vat":"37.21"}

related_products.base_price.gross

Cena brutto (netto + VAT) 

number ($decimal)(10,2) 

related_products.base_price.vat

VAT 

number ($decimal)(10,2) 

related_products.promo_price

Cena promocyjna produktu 

object 

 

related_products.promo_price.net

Cena netto 

number ($decimal)(10,2) 

"promo_price":{"net":"160.98","gross":"198.00","vat":"37.02"}

related_products.promo_price.gross

Cena brutto (netto + VAT) 

number ($decimal)(10,2) 

related_products.promo_price.vat

VAT 

number ($decimal)(10,2) 

related_products.lowest_price

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

object 

 

related_products.lowest_price.net

Cena netto 

number ($decimal)(10,2) 

"lowest_price ":{"net":"160.98","gross":"198.00","vat":"37.02"}

related_products.lowest_price.gorss

Cena brutto (netto + VAT) 

number ($decimal)(10,2) 

related_products.lowest_price.vat

VAT 

number ($decimal)(10,2) 

related_products.quantity

Obiekt do przekazania informacji o ilości produktu 

object 

 

related_products.quantity.quantity

Ilość produktu 

number ($decimal) 

 

"quantity":1

related_products.quantity.quantity_type

Typ quantity. Dostępne wartości: [ DECIMAL, INTEGER ] 

 

string 

"quantity_type":"INTEGER"

related_products.quantity.quantity_unit

Jednostka ilości produktu 

string 

"quantity_unit":"pcs"

related_products.quantity.available_quantity

Ilość dostępnego produktu sklepie 

number($decimal) 

 

"available_quantity":26

related_products.quantity.min_quantity 

Minimalna  ilość produktu jaką klient może zamówić np. przy jednym zamówieniu 

number ($decimal) 

"min_quantity":2 

related_products.quantity.max_quantity

Maksymalna ilość produktu jaką klient może zamówić np. przy jednym zamówieniu 

number($decimal) 

 

"max_quantity": 26

related_products.quantity.quantity_jump

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

"quantity_jump": 0.5

related_products.product_attributes

Obiekt służący do określenia atrybutów produktu 

array 

 

related_products.product_attributes.attribute_name

Nazwa atrybutu 

string 

"product_attributes":[{"attribute_name":"Wymiary/Pojemność","attribute_value":"54 cm x 38 cm x 10 cm"},{"attribute_name":"Materiał","attribute_value":"Washable paper standard + kodura + pasy bawełniane tkane"}]

related_products.product_attributes.attribute_value

Wartość atrybutu 

string 

 

related_products.variants

Obiekt obecnie nie wykorzystywany. Funkcjonalność będzie wdrażana w kolejnych wersjach aplikacji. 

object 

 

related_products.variants.variant_id

Id wariantu 

string 

 

related_products.variants.variant_name

Nazwa wariantu 

string 

 

related_products.variants.variant_description

Opis szczegółowy wariantu 

string 

 

related_products.variants.variant_type

Typ wariantu 

string 

 

related_products.variants.variant_values

Wartość wariantu 

string 

 

related_products.delivery_related_products

Obiekt służący do przekazania informacji o dostępnych formach dostawy dla produktu. Jeśli brak obiektu delivery_product, to oznacza że dostawa dostępna wszystkimi typami

object

O

 

related_products.delivery_related_products.delivery_type

Typ dostawy

string

O

 

related_products.delivery_related_products.if_delivery_available

Flaga informująca czy typ dostawy dostępna

boolean

O

 

related_products.delivery_related_products.if_delivery_free

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

 

consents

Obiekt służący do przekazania listy zgód dla danego koszyka.
Maksymalna ilość zgód dla koszyka: 10

array 

 Y

 

consents.consent_id

Id zgody nadawane przez merchanta 

string 

 Y

"consent_id":3

consents.consent_link

Link przekierowujący do pełnej treści zgodny np. do strony merchanta 

string 

 Y

"consent_link":"https://test.outofthebox.pl/zwroty-i-reklamacje/"

consents.label_link

Label do linku przekazanego w label_link

string

O

"label_link": "Regulaminu",

consents.additional_consent_links

Obiekt służący do przekazania dodatkowego linku do zgody/regulaminu

object

O

 

consents.additional_consent_links.id

Id zgody nadawane przez merchanta

string

O

"id": "0"

consents.additional_consent_links.consent_link

Link przekierowujący do pełnej treści zgodny np. do strony merchanta

string

O

"consent_link": "https://uat.outofthebox.pl/privacy-policy/",

consents.additional_consent_links.label_link

Label do linku przekazanego w label_link

string

O

"label_link": "Polityką prywatności"

consents.consent_description

Opis zgody, nie więcej niż 500 znaków 

string 

 Y

consent_description":"zwroty i reklamacje"

consents.consent_version

Wersja zgody 

string 

 Y

"consent_version":1

consents.requirement_type

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

"requirement_type":"OPTIONAL"

merchant_store

Obiekt służący do przekazania cookie koszyka klienta w celu umożliwienia przejścia ze aplikacji InPost Pay do koszyka w sklepie merchanta

object

O

-

merchant_store.url

url sklepu 

string

Y

"url": "https://uat.outofthebox.pl/cart/",

merchant_store.cookies

Obiekt do przekazania cookie

object

Y

-

merchant_store.cookies.domain

Domena pliku cookie reprezentowana przez parę key-value

string

Y

"domain": "uat.outofthebox.pl",

merchant_store.cookies.key

Cookie key

string

Y

"key": "wp_woocommerce_session_f3cd21b400c074e165b59837d7a9d0a4",

merchant_store.cookies.value

Cookie value

string

Y

"value": "t_f13664beda2ec455d97546c1ddab8b%7C%7C1699438060%7C%7C1699434460%7C%7Cf77d310ce1f0440cb4812f5043736989",

merchant_store.cookies.path

Cookie path

string

O

"path": "/",

merchant_store.cookies.expires

Czas wygaśnięcia pliku cookie lub maxAge

string($date-time)

O

"expires": "2025-01-16T14:17:02.486Z",

merchant_store.cookies.secure

Informacje o bezpieczeństwie plików cookie

string

O

"secure": false,

merchant_store.cookies.http_only

Informacje http o plikach cookie

string

O

"http_only": true,

merchant_store.cookies.same_site

Informacje o pliku cookie sameSite [ STRICT, LAX, NONE ]

string

O

"same_site": "LAX",

merchant_store.cookies.priority

Priorytet plików cookie [ LOW, MEDIUM, HIGH ]

string

O

"priority": "MEDIUM",

merchant_store.cookies.max_age

Maksymalny czas cookie

number ($decimal)

O

"max_age": 0

 

Response 

Nazwa pola 

Opis  

Typ 

Wymagalność 

Dodatkowe uwagi 

inpost_basket_id 

Identyfikator koszyka nadawany przez aplikacje Inpost Pay 

Dana nie wykorzystywana przez merchanta. Identyfikator docelowo wykorzystywany przez widget w celu umożliwienia prawidłowego przekierowania z poziomu widget do aplikacji Inpost Pay 

string 

"inpost_basket_id": " 866e5bf6-4e8a-443e-98f5-f9b0c5c149dd"


PUT /v1/izi/basket/{basket_id}

 

Przykładowy request

{ "browser_id": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx", "summary": { "basket_base_price": { "net": "80.49", "gross": "99.00", "vat": "18.51" }, "basket_final_price": { "net": "80.49", "gross": "99.00", "vat": "18.51" }, "basket_promo_price": { "net": "80.49", "gross": "99.00", "vat": "18.51" }, "currency": "PLN", "basket_expiration_date": "2023-08-24T07:58:30.062Z", "basket_additional_information": "string", "payment_type": ["CARD","CARD_TOKEN","APPLE_PAY","BLIK_CODE","BLIK_TOKEN","PAY_BY_LINK","SHOPPING_LIMIT","DEFERRED_PAYMENT","GOOGLE_PAY","CASH_ON_DELIVERY"], "basket_notice": null }, "delivery": [ { "delivery_type": "APM", "delivery_date": "2023-08-24T07:58:30.062Z", "delivery_options": [], "delivery_price": { "net": "0.00", "gross": "0.00", "vat": "0.00" } } ], "promo_codes": [], "products": [ { "product_id": "585", "product_category": "20", "ean": "0", "product_name": "Drewniane bule", "product_description": " \r\n\r\nCo to są bule? Na mieście mówią, że „bule to kule na nudy bóle". To gra, w której zasady są proste, a emocje sięgają 10 piętra. Bule to kule. W tym przypadku -- drewniane, z twardego drewna bukowego. Jedna z nich to świnka zwana prosiaczkiem. Taka kruszynka-wieprzowinka.\r\n\r\nCo trzeba mieć, żeby zagrać w bule? Przynajmniej jednego przyjaciela. Albo przyjaciółkę. Albo sąsiada, wujka, kuzynkę, znajomego, brata, siostrę, kolegę. Trzeba też mieć kawałek trawnika, może być bez trawy. Bule to rzucanie kulami w świnkę. Kto rzuci najbliżej, ten wygrywa. Gra w bule jest prosta, choć kule są okrągłe. Dziwne, co nie?", "product_link": "https://outofthebox.pl/product/drewniane-bule/", "product_image": "https://outofthebox.pl/app/uploads/2022/10/INPOST_aranzacje3-1.jpg", "base_price": { "net": 80.49, "gross": 99.00, "vat": 18.51 }, "quantity": { "quantity": 1, "quantity_type": "INTEGER", "quantity_unit": "pcs", "available_quantity": 275, "max_quantity": 275 }, "product_attributes": [], "variants": [] } ], "related_products": [ { "product_id": "567", "product_category": "20", "ean": "0", "product_name": "Mata do ćwiczeń", "product_description": " \r\n\r\nNie wiemy, ile korków wystrzelonych w Sylwestra potrzeba do stworzenia korkowej maty do jogi. Ale wiemy, że dzięki niej możesz zacząć całkiem nowy czas w swoim życiu.\r\n\r\nĆwiczenia na niej to prawdziwy body & soul balance.\r\n\r\nZatem rusz swe "body" po naturalny zastrzyk energii i zadbaj o relaks swojej "soul". Warto wiedzieć, że mata korkowa z naturalnego kauczuku ma najlepsze właściwości antypoślizgowe.", "product_link": "https://outofthebox.pl/product/mata-do-cwiczen/", "product_image": "https://outofthebox.pl/app/uploads/2022/10/INPOST_aranzacje25.jpg", "base_price": { "net": 202.44, "gross": 249.00, "vat": 0.00 }, "quantity": { "quantity": 1, "quantity_type": "INTEGER", "quantity_unit": "pcs", "available_quantity": 197485, "max_quantity": 197485 }, "product_attributes": [ { "attribute_name": "Wymiary/Pojemność", "attribute_value": "183x61 cm, 4 mm grubości" }, { "attribute_name": "Materiał", "attribute_value": "Korek i naturalny kauczuk" }, { "attribute_name": "Waga", "attribute_value": "2.6 kg" } ], "variants": [] }, { "product_id": "554", "product_category": "20", "ean": "0", "product_name": "Paryżanka", "product_description": " \r\n\r\nCzy wiesz, co tak naprawdę widzą ludzie, kiedy idziesz sobie z paryżanką?\r\n\r\nWidzą, że jesteś EKO. Nie używasz foliowych woreczków jednorazowego użytku.\r\n\r\nWidzą, że jesteś modna. W końcu Paryż to miejsce, w którym od dawna decyduje się o tym, co warto ze sobą nosić.\r\n\r\nParyżanka nie kryje się z tym, że wygląda rewelacyjnie, kiedy jest wypełniona świeżymi owocami.\r\n\r\nWidzą też, że lubisz naturalne materiały, bo paryżanka wykonana jest w 100 procentach z bawełny.\r\n\r\nI że w swoim życiu działasz zgodnie z zasadą out of the box.\r\nPo swojemu. Jak InPost.", "product_link": "https://outofthebox.pl/product/paryzanka/", "product_image": "https://outofthebox.pl/app/uploads/2022/10/INPOST_aranzacje11-1.jpg", "base_price": { "net": 23.58, "gross": 29.00, "vat": 0.00 }, "quantity": { "quantity": 1, "quantity_type": "INTEGER", "quantity_unit": "pcs", "available_quantity": 468, "max_quantity": 468 }, "product_attributes": [], "variants": [] } ], "consents": [ { "consent_id": "3", "consent_link": "https://outofthebox.pl/zwroty-i-reklamacje/", "consent_description": "zwroty i reklamacje", "consent_version": "1", "requirement_type": "OPTIONAL" } ] }

Response

{ "inpost_basket_id": "866e5bf6-4e8a-443e-98f5-f9b0c5c149dd" }

Przykład implementacji w języku PHP

  • Podanie kodu -

W pliku implementacjaKlienta.txt została dodana tylko funkcja putBasket.

/** * 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 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.