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 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
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 |
| Indeks stron | string | O |
|
| Rozmiar strony | string | O |
|
| Identyfikator zamówienia | string | O |
|
Request – brak
Response
Nazwa pola | Opis | Typ | Wymagalność | Dodatkowe uwagi | |||
| Rozmiar strony | integer | O |
| |||
| Całkowita liczba pozycji | integer | O |
| |||
| Indeks stron | integer | O |
| |||
| Obiekt zwracający listę zamówień | object | O | ||||
| Szczegóły zamówienia | object | Y | ||||
| Uwagi o zmówieniu | string | O |
| |||
| Identyfikator zmówienia nadawany przez Merchanta | string | Y |
| |||
| pos
| POS id | string | Identyfikator zamówienia prezentowany klientowi oraz wykorzystywany do płatności. W przypadku braku wykorzystywany jest order_id. | string | O |
|
| POS id | string | Y |
| |||
| Data utworzenia zamówienia | string($date-time) | Y |
| |||
| Ostatnia data aktualizacji zamówienia | string($date-time) | O |
| |||
| Obiekt zwracający informacje o płatności | object | O | ||||
| 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 | Y |
| |||
| Status płatności Enum:[ UNPAID, STARTED, PENDING, AUTHORIZED, DECLINED, CANCELLED, ERROR, COD ] | string | Y |
| |||
| 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 | O |
| |||
| Szczegóły płatności | object | O | ||||
| Numer referencyjny | string | Y |
| |||
| Id płatność | string | O |
| |||
| Wykorzystany token zabezpieczający | string | O |
| |||
| Typ płatności | string | Y |
| |||
| Token karty | string | O |
| |||
| Informacje o karcie | object | O | ||||
| Ostatnie 4 cyfry karty | string | O |
| |||
| Schemat, w którym działa karta | string | O |
| |||
| Typ kart [ DEBIT, CREDIT, PREPAID, CHARGE, DEFERRED_DEBIT ] | string | O |
| |||
| Status płatności | string | O |
| |||
| Kod płatności | string | O |
| |||
| Dodatkowa informacja o płatności | string | O |
| |||
| Kod błędu | string | O |
| |||
| Wiadomość o płatności (kod) | string | O |
| |||
| Data transakcji | string($date-time) | O |
| |||
| 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:
| string | Y |
| |||
| 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 | Y |
| |||
| Cena za zamówienie bez kosztów dostawy | object | Y | ||||
| Netto | number($decimal) | Y |
| |||
| Brutto | number($decimal) | Y | ||||
| VAT | number($decimal) | Y | ||||
| Cena za zamówienie z uwzględnieniem kosztów dostawy | object | Y | ||||
| Netto | number($decimal) | Y |
| |||
| Brutto | number($decimal) | Y | ||||
| VAT | number($decimal) | Y | ||||
| Wartość zastosowanych kodów rabatowych na zamówieniu | number($decimal) | Y |
| |||
| Waluta zamówienia (obecnie tylko PLN) | string | Y |
| |||
| Lista nadanych numerów przesyłek zamówienia | array | O |
| |||
| Informacje o koncie użytkowania | object | Y | ||||
| Imię | string | Y |
| |||
| Nazwisko | string | Y | ||||
| Numer telefonu | object | Y | ||||
| Prefix | string | Y | ||||
| Numer telefonu użytkownika | string | Y | ||||
| string | Y |
| ||||
| Adres użytkownika | object | Y | ||||
| Kod kraju | string | Y |
| |||
| Adres | string | Y | ||||
| Miasto | string | Y | ||||
| Kod pocztowy | string | Y | ||||
| Dane do faktury | object | O | ||||
| Forma prawna [ PERSON, COMPANY ] | string | O |
| |||
| Kod kraju | string | O | ||||
| Id prefix | string | O | ||||
| Identyfikator podatkowy | string | O | ||||
| Nazwa firmy | string | O | ||||
| Imię | string | O | ||||
| Nazwisko | string | O | ||||
| Miasto | string | O | ||||
| Ulica | string | O | ||||
| Numer budynku | string | O | ||||
| Numer mieszkania | string | O | ||||
| Kod pocztowy | string | O | ||||
| string | O | |||||
| Data rejestracji | string | O | ||||
| Dodatkowe informacje | string | O | ||||
| Informacje o dostawie | object | Y | ||||
| Forma dostawy Enum: [ APM, COURIER ] | string | Y |
| |||
| Data dostawy | string($date-time) | Y |
| |||
| Wybrane opcje dostawy | array | O | ||||
| Nazwa | string | Y |
| |||
| Kod opcji | string | Y | ||||
| Kwota opcji odstawy | object | Y | ||||
| Netto | number($decimal) | Y | ||||
| Brutto | number($decimal) | Y | ||||
| VAT | number($decimal) | Y | ||||
| string | O |
| ||||
| Numer telefonu | object | O | ||||
| Prefix | string | Y |
| |||
| Numer | string | Y | ||||
| Punkt dostawy paczkomatu | string | O |
| |||
| Adres dostawy | object | O | ||||
| Nazwa | string | Y |
| |||
| Kod kraju | string | Y | ||||
| Adres | string | Y | ||||
| Miasto | string | Y | ||||
| Kod pocztowy | string | Y | ||||
| Obiekt służący do przekazania informacji o koszcie dostawy | object | Y | ||||
| Cena netto | number ($decimal)(10,2) | Y |
| |||
| Cena brutto (netto + VAT) | number ($decimal)(10,2) | Y | ||||
| VAT | number ($decimal)(10,2) | Y | ||||
| Uwagi dla kuriera | string | O |
| |||
| Lista produktach w zamówieniu | array | Y | ||||
| Identyfikator produktu nadany przez Merchanta | string | Y |
| |||
| Kategoria produktu nadana przez Merchanta | string | O |
| |||
| Ean | string | O |
| |||
| Nazwa produktu | string | Y |
| |||
| Opis produktu | string | O |
| |||
| Link do produktu na stronie Merchanta | string | O |
| |||
| Link do zdjęcia produktu. Preferowane format: png, jpg (rekomendacja: png bez tła)
| string | O |
| |||
| base_price Cena podstawowa z produkt | object | Y
| Obiekt do przekazania dodatkowych zdjęć produktu (lista) | object | O |
|
| base
| price.
| Zdjęcie produktu. Preferowany rozmiar 360 x 352 | string | Y |
| |
| Zdjęcie produktu. Preferowany rozmiar 360 x 504 | string | Y |
| |||
| Cena produktu uwzględniająca zastosowane rabaty i kody promocyjne na produkcie | object | Y | ||||
| Cena netto | number ($decimal)(10,2)
| Y |
| |||
| Cena brutto (netto + VAT) | number ($decimal)(10,2) | Y | ||||
| VAT | number ($decimal)(10,2) | Y | ||||
| Obiekt służący do przekazania najniższej ceny produktu z ostatnich 30 dni. Wymagane w celu obsłużenia dyrektywy Omibus | object | O | ||||
| Cena netto | number ($decimal)(10,2)
| Y |
| |||
| Cena brutto (netto + VAT) | number ($decimal)(10,2)
| Y | ||||
| VAT | number ($decimal)(10,2)
| Y | ||||
| Obiekt do przekazania informacji o ilości produktu | object | Y | ||||
| Ilość produktu | number ($decimal) | Y |
| |||
| Typ pola quantity. Dostępne wartości: [DECIMAL, INTEGER ]
| string | Y |
| |||
| Jednostka ilości produktu | string | O |
| |||
| Obiekt służący do określenia atrybutów produktu | array | O | ||||
| Nazwa atrybutu | string | Y |
| |||
| Wartość atrybutu | string | Y | ||||
| Obiekt służący do przekazania wariantów produktów. Obiekt obecnie nie wykorzystywany. Funkcjonalność będzie wdrażana w kolejnych wersjach aplikacji. | object | O | ||||
| Id wariantu | string | Y | ||||
| Nazwa wariantu | string | Y | ||||
| Opis szczegółowy wariantu | string | O | ||||
| Typ wariantu | string | O | ||||
| Wartość wariantu | string | O | ||||
| Obiekt służący do przekazania informacji o wyrażonych zgodach przez klienta dla danego zamówienia | array | Y | ||||
| Id zgody | string | Y |
| |||
| Wersja zgody | string | O |
| |||
| Informacja czy została wyrażona zgoda | boolean | Y |
|
Status | ||||
---|---|---|---|---|
|
/v1/izi/orders
Przykładowy response
Code Block | ||
---|---|---|
| ||
{
"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 name implementacjaKlienta.txt
Info |
---|
W pliku implementacjaKlienta.txt została dodana tylko funkcja getOrders. |
Code Block | ||
---|---|---|
| ||
/** * 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 | ||
---|---|---|
|