Pobranie listy zamówień

Artykuł zawiera opis metody zwracającej informacje o zamówienia utworzonych w aplikacji InPost wraz z przykładem implementacji metody w języku PHP.

 

Opis metody

Metoda zwracająca informacje o zamówieniach utworzonych w aplikacji 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 

page_index 

Indeks stron 

string 

  

page_size 

Rozmiar strony 

string 

  

order_id

Identyfikator zamówienia

string

O

 

  

Request – brak 

Response

Nazwa pola 

Opis  

Typ 

Wymagalność 

Dodatkowe uwagi 

page_size

Rozmiar strony 

integer 

"page_size":1

total_items

Całkowita liczba pozycji 

integer 

"total_items":159

page_index

Indeks stron 

integer 

"page_index":1

orders

Obiekt zwracający listę zamówień  

object 

 

orders.order_details 

Szczegóły zamówienia 

object 

 

orders.order_details.order_comments

Uwagi o zmówieniu 

string 

"comments ":"Zamówienie przetwarzane"

orders.order_details.order_id

Identyfikator zmówienia nadawany przez Merchanta 

string 

"order_id":"3433d1b7-fd9b-484b-aa68-80fccc575407"

orders.order_details.customer_order_id

Identyfikator zamówienia prezentowany klientowi oraz wykorzystywany do płatności. W przypadku braku wykorzystywany jest order_id.

string

O

"customer_order_id":"3433d1b7”

orders.order_details.pos_id

POS id 

string 

"pos_id":"000000000"

orders.order_details.order_creation_date 

Data utworzenia zamówienia 

string($date-time) 

"order_creation_date":"2023-09-07T14:18:41.949Z" 

orders.order_details.order_update_date 

Ostatnia data aktualizacji zamówienia 

string($date-time) 

"order_update_date":"2023-09-07T14:23:54.190Z" 

orders.order_details.payment

Obiekt zwracający informacje o płatności 

object 

 

orders.order_details.payment.payment_type

Wybrany typ płatności. Enum: 

[ CARD, CARD_TOKEN, GOOGLE_PAY, APPLE_PAY, BLIK_CODE, BLIK_TOKEN, PAY_BY_LINK, SHOPPING_LIMIT, DEFERRED_PAYMENT, CASH_ON_DELIVERY ] 

string 

"payment_type":"BLIK_CODE"

orders.order_details.payment.payment_status

Status płatności 

Enum:[ UNPAID, STARTED, PENDING, AUTHORIZED, DECLINED, CANCELLED, ERROR, COD ] 

string 

"payment_status":"AUTHORIZED"

orders.order_details.payment.available_payment_types

Dostępne typy płatności dla danego zamówienia.  

Lista z możliwymi wartościami : [ CARD, CARD_TOKEN, GOOGLE_PAY, APPLE_PAY, BLIK_CODE, BLIK_TOKEN, PAY_BY_LINK, SHOPPING_LIMIT, DEFERRED_PAYMENT, CASH_ON_DELIVERY ] 

  

array 

"available_payment_types":["BLIK_CODE","BLIK_TOKEN","PAY_BY_LINK"]

orders.order_details.payment.payment_details

Szczegóły płatności 

object 

 

orders.order_details.payment.payment_details.payment_reference

Numer referencyjny 

string 

"payment_reference":"52428_9b642ee3-ff3d-4fae-8ff8-30e29c0dafac" 

orders.order_details.payment.payment_details.payment_id 

Id płatność 

string 

"payment_id":"3cb4967d-4b63-4c5c-84bc-54e699a2dca0" 

orders.order_details.payment.payment_details.payment_sec_token 

Wykorzystany token zabezpieczający  

string 

"payment_sec_token":"eyJraWQiOiIyMDRjY2U0OC1iYTFkLTQ0ODYtOTNlNy1kY..." 

orders.order_details.payment.payment_details.payment.payment_type 

Typ płatności 

string 

"payment_type":"BLIK_TOKEN" 

orders.order_details.payment.payment_details.payment_token 

Token karty 

string 

"payment_token":"gr...ki@it...om"

orders.order_details.payment.payment_details.payment_card 

Informacje o karcie 

object 

 

orders.order_details.payment.payment_details.payment_card.last_four_digits 

Ostatnie 4 cyfry karty 

string 

"last_four_digits":"0021"

orders.order_details.payment.payment_details.payment_card.scheme 

Schemat, w którym działa karta 

string 

"scheme":"https://static.payu.com/images/mobile/logos/pbl_c.png" 

orders.order_details.payment.payment_details.payment_card.card_type 

Typ kart [ DEBIT, CREDIT, PREPAID, CHARGE, DEFERRED_DEBIT ] 

string 

"card_type":" DEBIT"

orders.order_details.payment.payment_details.payment_status 

Status płatności 

string 

"payment_status":"AUTHORIZED"

orders.order_details.payment.payment_details.payment_code 

Kod płatności 

string 

"payment_code":"00"

orders.order_details.payment.payment_details.payment_description 

Dodatkowa informacja o płatności 

string 

"payment_description":"APPROVED"

orders.order_details.payment.payment_details.payment_error_code 

Kod błędu 

string 

"payment_error_code":"test" 

orders.order_details.payment.payment_details.payment_message_code 

Wiadomość o płatności (kod) 

string 

"payment_message_code":"userCancelled" 

orders.order_details.payment.payment_details.payment_date 

Data transakcji 

string($date-time) 

"payment_date":"2023-08-02T09:48:12.302Z" 

orders.order_details.order_status 

Status techniczny - służy do określenia uprawnień, jakie może wykonać klient na zamówieniu w aplikacji InPost Pay. 

Wyróżniamy 3 statusy techniczne: 

  

ORDER_COMPLETED - status nadawany przez Merchanta, informujący aplikacje InPost Pay, że zamówienie zostało sfinalizowane przez klienta na stronie sklepu Merchanta.

ORDER_REJECTED - status oznacza odrzucenie zamówienia. 

ORDER_PROCESSING - zamówienie w trakcie realizacji 

string 

"order_status":"ORDER_COMPLETED"

orders.order_details.order_merchant_status_description 

Status opisowy prezentowany klientowi w aplikacji InPost Pay - każdy Merchant może przekazać status tak, aby statusy prezentowane w InPost Mobile były zgodne ze statusem prezentowanymi klientowi w sklepie Merchanta. 

string 

"order_merchant_status_description":"W trakcie realizacji"

orders.order_details.order_base_price 

Cena za zamówienie bez kosztów dostawy 

object 

 

orders.order_details.order_base_price.net 

Netto 

number($decimal) 

"order_base_price":{"net":202.51,"gross":263.0,"vat":60.49},

orders.order_details.order_base_price.gross 

Brutto 

number($decimal) 

orders.order_details.order_base_price.vat 

VAT 

number($decimal) 

orders.order_details.order_final_price 

Cena za zamówienie z uwzględnieniem kosztów dostawy 

object 

 

orders.order_details.order_final_price.net 

Netto 

number($decimal) 

"order_final_price":{"net":208.2,"gross":270.0,"vat":61.8}

orders.order_details.order_final_price.gross 

Brutto 

number($decimal) 

orders.order_details.order_final_price.vat 

VAT 

number($decimal) 

orders.order_details.order_discount

Wartość zastosowanych kodów rabatowych na zamówieniu

number($decimal) 

"order_discount": 20.2

orders.order_details.currency 

Waluta zamówienia (obecnie tylko PLN) 

string 

"currency":"PLN"

orders.order_details.delivery_references_list 

Lista nadanych numerów przesyłek zamówienia 

array 

"delivery_references_list":[12345678]

orders.account_info 

Informacje o koncie użytkowania 

object 

 

orders.account_info.name 

Imię  

string 

"account_info":{"name":"Jan","surname":"Kowalski","phone_number":{"country_prefix":"+48","phone":"600000000"}

orders.account_info.surname 

Nazwisko 

string 

orders.account_info.phone_number 

Numer telefonu 

object 

orders.account_info.phone_number.country_prefix 

Prefix 

string 

orders.account_info.phone_number.phone 

Numer telefonu użytkownika 

string 

orders.account_info.mail 

Mail 

string 

"mail":"test@g....m"

orders.account_info.client_address 

Adres użytkownika 

object 

 

orders.account_info.client_address.country_code 

Kod kraju 

string 

"client_address":{"country_code":"PL","city":"Test","address":"Testowa 3/9 Testowa 3 ","postal_code":"00-000"}

orders.account_info.client_address.address 

Adres 

string 

orders.account_info.client_address.city 

Miasto 

string 

orders.account_info.client_address.postal_code 

Kod pocztowy 

string 

orders.invoice_details 

Dane do faktury 

object 

 

orders.invoice_details.legal_form 

Forma prawna [ PERSON, COMPANY ] 

string 

"invoice_details":{"legal_form":"COMPANY","country_code":"PL","tax_id":"0000000000","company_name":TEST","city":"Warszawa","street":"ul. Testowa","building":"10A","postal_code":"01-997","mail":"test@m...l","registration_data_edited":"true"}

orders.invoice_details.country_code 

Kod kraju 

string 

orders.invoice_details.tax_id_prefix 

Id prefix 

string 

orders.invoice_details.tax_id 

Identyfikator podatkowy 

string 

orders.invoice_details.company_name 

Nazwa firmy 

string 

orders.invoice_details.name 

Imię 

string 

orders.invoice_details.surname 

Nazwisko 

string 

orders.invoice_details.city 

Miasto 

string 

orders.invoice_details.street 

Ulica 

string 

orders.invoice_details.building 

Numer budynku 

string 

orders.invoice_details.flat 

Numer mieszkania 

string 

orders.invoice_details.postal_code 

Kod pocztowy 

string 

orders.invoice_details.mail 

Mail 

string 

orders.invoice_details.registration_data_edited 

Data rejestracji 

string 

orders.invoice_details.additional_information 

Dodatkowe informacje 

string 

orders.delivery 

Informacje o dostawie 

object 

 

orders.delivery.delivery_type 

Forma dostawy Enum: 

[ APM, COURIER ] 

string 

"delivery_type":"COURIER"

orders.delivery.delivery_date 

Data dostawy  

string($date-time) 

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

orders.delivery.delivery_options 

Wybrane opcje dostawy 

array 

 

orders.delivery.delivery_options.delivery_name 

Nazwa  

string 

"delivery_options":[{"delivery_name":"Paczka w Weekend","delivery_code_value":"PWW","delivery_option_price":{"net":5,"gross":"6.15","vat":"1.15"}}]

orders.delivery.delivery_options.delivery_code_value 

Kod opcji 

string 

orders.delivery.delivery_options.delivery_option_price 

Kwota opcji odstawy 

object 

orders.delivery.delivery_options.delivery_option_price.net 

Netto 

number($decimal) 

orders.delivery.delivery_options.delivery_option_price.gross 

Brutto 

number($decimal) 

orders.delivery.delivery_options.delivery_option_price.vat 

VAT 

number($decimal) 

orders.delivery.mail 

Mail 

string 

"mail":"test@g..m" 

orders.delivery.phone_number 

Numer telefonu  

object 

 

orders.delivery.phone_number.country_prefix 

Prefix 

string 

"phone_number":{"country_prefix":"+48","phone":"600000000"}

orders.delivery.phone_number.phone 

Numer  

string 

orders.delivery.delivery_point 

Punkt dostawy paczkomatu 

string 

"delivery_point":"RSL218"

orders.delivery.delivery_address 

Adres dostawy 

object 

 

orders.delivery.delivery_address.name 

Nazwa 

string 

"delivery_address":{"name":"Jan Kowalski","country_code":"PL","address":"Testowa 3 ","city":"Test","postal_code":"00-000"}

orders.delivery.delivery_address.country_code 

Kod kraju 

string 

orders.delivery.delivery_address.address 

Adres 

string 

orders.delivery.delivery_address.city 

Miasto 

string 

orders.delivery.delivery_address.postal_code 

Kod pocztowy 

string 

orders.delivery.delivery_price 

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

object 

 

orders.delivery.delivery_price.net 

Cena netto 

number ($decimal)(10,2) 

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

orders.delivery.delivery_price.gross 

Cena brutto (netto + VAT) 

number ($decimal)(10,2) 

orders.delivery.delivery_price.vat 

VAT 

number ($decimal)(10,2) 

orders.delivery.courier_note 

Uwagi dla kuriera 

string 

" courier_note ":"Proszę o przekazanie przesyłki po godzinie 16"

orders.products 

Lista produktach w zamówieniu 

array 

 

orders.products.product_id 

Identyfikator produktu nadany przez Merchanta 

string 

"product_id":26

orders.products.product_category 

Kategoria produktu nadana przez Merchanta 

string 

"product_category":20

orders.products.ean 

Ean 

string 

"ean":"0"

orders.products.product_name 

Nazwa produktu  

string 

"product_name":"Plecak washpapa"

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

orders.products.product_link 

Link do produktu na stronie Merchanta 

string 

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

orders.products.product_image 

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

 

string 

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

orders.products.additional_product_images

Obiekt do przekazania dodatkowych zdjęć produktu (lista)

object

O

-

orders.products.additional_product_images.small_size

Zdjęcie produktu. Preferowany rozmiar 360 x 352

string

Y

-

orders.products.additional_product_images.normal_size

Zdjęcie produktu. Preferowany rozmiar 360 x 504

string

Y

-

orders.products.base_price 

Cena produktu uwzględniająca zastosowane rabaty i kody promocyjne na produkcie 

object 

 

 

orders.products.base_price.net 

Cena netto 

number ($decimal)(10,2) 

 

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

orders.products.base_price.gross 

Cena brutto (netto + VAT) 

number ($decimal)(10,2) 

orders.products.base_price.vat 

VAT 

number ($decimal)(10,2) 

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

object 

 

orders.products.lowest_price.net 

Cena netto 

number ($decimal)(10,2) 

 

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

orders.products.lowest_price.gross 

Cena brutto (netto + VAT) 

number ($decimal)(10,2) 

 

orders.products.lowest_price.vat 

VAT 

number ($decimal)(10,2) 

 

orders.products.quantity 

Obiekt do przekazania informacji o ilości produktu 

object 

 

orders.products.quantity.quantity 

Ilość produktu 

number ($decimal) 

"quantity":1

orders.products.quantity.quantity_type 

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

 

string 

"quantity_type":"INTEGER"

orders.products.quantity.quantity_unit 

Jednostka ilości produktu 

string 

"quantity_unit":"pcs"

orders.products.product_attributes 

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

array 

 

orders.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"}]

orders.products.product_attributes.attribute_value

Wartość atrybutu 

string 

 

orders.products.variants

Obiekt służący do przekazania wariantów produktów. Obiekt obecnie nie wykorzystywany. Funkcjonalność będzie wdrażana w kolejnych wersjach aplikacji. 

object 

 

orders.products.variants.variant_id 

Id wariantu 

string 

 

orders.products.variants.variant_name 

Nazwa wariantu 

string 

 

orders.products.variants.variant_description 

Opis szczegółowy wariantu 

string 

 

orders.products.variants.variant_type 

Typ wariantu 

string 

 

orders.products.variants.variant_values 

Wartość wariantu 

string 

 

orders.consents 

Obiekt służący do przekazania informacji o wyrażonych zgodach przez klienta dla danego zamówienia 

array 

 

orders.consents.consent_id 

Id zgody  

string 

"consent_id":3

orders.consents.consent_version 

Wersja zgody 

string 

"consent_version":1

orders.consents.is_accepted 

Informacja czy została wyrażona zgoda 

boolean 

"is_accepted": true

GET /v1/izi/orders

Przykładowy response

{ "orders": [ { "order_details": { "order_id": "c5bea8ea-4444-4aaa-9ccf-12345678", "pos_id": "V123", "order_creation_date": "2023-10-19T07:18:27.000Z", "order_update_date": "2023-10-19T08:37:23.313Z", "payment": { "payment_type": "BLIK_CODE", "payment_status": "AUTHORIZED", "payment_details": { "payment_reference": "1234_6e8d5ee2-26eb-4953-bb68-12344567", "payment_type": "BLIK_CODE", "payment_status": "AUTHORIZED", "sdk_payment_status": "PENDING", "payment_id": "1234567-3894-2222-3333-d9cad00781b4", "payment_code": "00", "payment_description": "APPROVED", "payment_date": "2023-10-19T05:18:42.202Z", "base_transaction_amount": { "amount": 35.9, "currency": "PLN" } }, "available_payment_types": [ "CARD", "BLIK_CODE", "BLIK_TOKEN", "PAY_BY_LINK", "SHOPPING_LIMIT", "DEFERRED_PAYMENT" ] }, "order_status": "ORDER_REJECTED", "order_merchant_status_description": "Anulowano", "order_base_price": { "net": 19.52, "gross": 24.01, "vat": 4.49 }, "order_final_price": { "net": 29.19, "gross": 35.9, "vat": 6.71 }, "currency": "PLN", "delivery_references_list": [] }, "account_info": { "name": "<secret>", "surname": "<secret>", "phone_number": { "country_prefix": "+48", "phone": "600000000" }, "mail": "jan.kowalski@o...l", "client_address": { "country_code": "pl", "city": "Warszawa", "address": "Warszawska 3,4", "postal_code": "00-000" } }, "delivery": { "delivery_type": "APM", "delivery_date": "2023-10-21T07:18:27.000Z", "mail": "<secret>", "phone_number": { "country_prefix": "+48", "phone": "600000000" }, "delivery_point": "WAW73M", "delivery_price": { "net": 9.67, "gross": 11.89, "vat": 2.22 } }, "products": [ { "product_id": "12345", "ean": "1234567890", "product_name": "Zestaw balonów", "product_link": "https://zestaw-balonow-urodzinowych", "product_image": "https://zestaw-balonow-urodzinowych-granatowo-czarny.jpg", "base_price": { "net": 19.52, "gross": 31.01, "vat": 4.49 }, "quantity": { "quantity": 1, "quantity_type": "INTEGER", "quantity_unit": "szt." } } ], "consents": [ { "consent_id": "7", "consent_version": "2023-06-06", "is_accepted": true }, { "consent_id": "3", "consent_version": "2018-06-07", "is_accepted": true }, { "consent_id": "2", "consent_version": "2018-06-07", "is_accepted": true }, { "consent_id": "4", "consent_version": "2018-06-07", "is_accepted": false } ] }, { "order_details": { "order_id": "123456-36ca-4731-a945-1234567890", "pos_id": "V123456789", "order_creation_date": "2023-10-19T07:30:46.000Z", "order_update_date": "2023-10-19T07:56:45.748Z", "payment": { "payment_type": "CASH_ON_DELIVERY", "payment_status": "COD" }, "order_status": "ORDER_REJECTED", "order_merchant_status_description": "Anulowano", "order_base_price": { "net": 1.45, "gross": 1.78, "vat": 0.33 }, "order_final_price": { "net": 13.08, "gross": 16.08, "vat": 3 }, "currency": "PLN", "delivery_references_list": [] }, "account_info": { "name": "Jan", "surname": "Kwiatkowski", "phone_number": { "country_prefix": "+48", "phone": "000000000" }, "mail": "j.kwiat@o...l", "client_address": { "country_code": "pl", "city": "Warszawa", "address": "Jana Pawła 33", "postal_code": "00-001" } }, "delivery": { "delivery_type": "APM", "delivery_date": "2023-10-21T07:30:46.000Z", "mail": "<secret>", "phone_number": { "country_prefix": "+48", "phone": "000000000" }, "delivery_point": "BPO02A", "delivery_price": { "net": 9.67, "gross": 11.89, "vat": 2.22 } }, "products": [ { "product_id": "3456", "ean": "12345678986", "product_name": "Magiczna gąbka", "product_link": "https://magiczna-gabka", "product_image": "https://magiczna-gabka.png", "base_price": { "net": 1.45, "gross": 1.78, "vat": 0.33 }, "quantity": { "quantity": 1, "quantity_type": "INTEGER", "quantity_unit": "szt." } } ], "consents": [ { "consent_id": "7", "consent_version": "2023-06-06", "is_accepted": true }, { "consent_id": "3", "consent_version": "2018-06-07", "is_accepted": true }, { "consent_id": "2", "consent_version": "2018-06-07", "is_accepted": true }, { "consent_id": "4", "consent_version": "2018-06-07", "is_accepted": false } ] } ], "page_size": 10, "total_items": 2, "page_index": 0 }

Przykład implementacji w języku PHP

  • Podanie kodu -

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

/** * 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);