Versions Compared

Key

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

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

Na tej stronie:

Table of Contents
minLevel1
maxLevel6
outlinefalse
typelist
printablefalse

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.

Info

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

posbase_price baseprice.

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

POS id 

string 

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.

Cena podstawowa z produkt 

object 

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

Status
colourBlue
titleGET
/v1/izi/orders

Przykład implementacji w języku

Przykładowy response

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

  • Podanie kodu -

    View file
    nameimplementacjaKlienta.txt

Info

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

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 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
        );
    }
    
    public function postOrderEvent(string $orderId, OrderEventRequest $orderEventRequest): void
    {
        $path = sprintf('order/%s/event', $orderId);
        $uri = new Uri($this->buildUri($path));
        /** @var string $body */
        $body = json_encode($orderEventRequest);
        $request = new Request(
            'POST',
            $uri,
            $this->provideDefaultClientHeaders(),
            $body
        );

        try {
            $response = $this->client->sendRequest($request);
            $statusCode = $response->getStatusCode();
            $content = $response->getBody()->getContents();
        } catch (\Throwable $throwable) {
            throw InpostPayPostOrderEventException::createResponseException($throwable);
        }

        if (HttpResponseStatus::CREATED()->getValue() === $statusCode) {
            return;
        }

        throw InpostPayPostOrderEventException::createBadStatusCodeException($statusCode, $content);
    }
    
    public function getOrders(int $pageIndex = null, int $pageSize = null): OrdersResponse
    {
        $path = 'orders';
        $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 OrdersResponseArray $data
             */
            $data = json_decode($content, true, 512, JSON_THROW_ON_ERROR);

            return OrdersResponse::fromArray($data);
        } catch (\Throwable $throwable) {
            throw InpostPayGetOrdersException::createResponseException($throwable);
        }
    }
}
  • W SDK.zip zawiera się kod zawierający obiekt requestu oraz response endpointu.

View file
nameSDK.zip