Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

Na tej stronie:

Table of Contents
minLevel1
maxLevel6
outlinefalse
typelist
printablefalse

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 

 

 

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

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

number ($decimal) 

"max_quantity":26

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 

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

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

number($decimal) 

 

"max_quantity":26

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 

consents

Obiekt służący do przekazania listy zgód dla danego koszyka 

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

 

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"


Status
colourRed
titlePUT
/v1/izi/basket/{basket_id}

Przykładowy request

Code Block
languagejson
{
  "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

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

Przykład implementacji w języku PHP

  • Podanie kodu -

    View file
    nameimplementacjaKlienta.txt

Info

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

Code Block
languagephp
/**
 * 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.

View file
nameSDK.zip