- Created by Michał Machowski , last modified by Joanna Wołosz on Jun 07, 2024
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 37 Next »
W tym rozdziale znajdziesz informacje dotyczące autoryzacji w komunikacji z InPost Pay oraz konfiguracji konta Merchanta i generowania dostępów (client_id
i client_secret
).
Na tej stronie:
Autoryzacja
Do uwierzytelniania komunikacji klienta z InPost Pay (Basket App) wykorzystany jest standard OAuth 2.0. W przypadku komunikacji service to service – bez kontekstu zalogowanego użytkownika wykorzystany jest client_credentials flow a OAuth (https://www.oauth.com/oauth2-servers/access-tokens/client-credentials/).
Merchant otrzymuje swój
client_id
iclient_secret
Client_id i client_secret dla środowiska produkcyjnego Merchant generuje poprzez panel Merchanta zgodnie z instrukcją.
Client_id i client_secret dla środowiska sandbox Merchant otrzymuje od InPost po wysłaniu zgłoszenia poprzez formularz kontaktowy zgodnie z instrukcją.
Pobiera access token
Podpisuje każdy request. Access token należy przekazać w nagłówku
Authorization: Bearer W-TYM-MIEJSCU-NALEZY-UMIESCIC-TOKEN
Serwer zasobów weryfikuje token i identyfikuje klienta
Wszystkie zapytania wysyłane do serwera wymagają podania prawidłowego i ważnego access tokenu, który należy do określonego Użytkownika.
Wygenerowany token ma określoną ważność (zdefiniowana w expires_in, która jest zwracana wraz z tokenem) i nie ma konieczności pobierania nowego tokena przy każdym zapytaniu.
Token endpoint jest stały i może być parametrem konfiguracyjnym po stronie klienta:
środowisko produkcyjne
https://login.inpost.pl/auth/realms/external/protocol/openid-connect/tokenśrodowisko sandbox
https://sandbox-login.inpost.pl/auth/realms/external/protocol/openid-connect/token
Pobranie tokenu
Request
curl --location 'https://sandbox-login.inpost.pl/auth/realms/external/protocol/openid-connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=sandbox' \ --data-urlencode 'client_secret=qwertyuiop' \ --data-urlencode 'grant_type=client_credentials'
Response
{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiw...", "expires_in": 300, "refresh_expires_in": 0, "token_type": "Bearer", "not-before-policy": 0, "scope": "api:inpostpay" }
Błędy jakie mogą wystąpić podczas generowania tokenu:
Invalid client credentials -
W przypadku podania błędnegoclient_id
Invalid client secret -
W przypadku podania błędnegoclient_secret
Missing form parameter: grant_type -
W przypadku niepodaniagrant_type:client_credentials
Przykład implementacji w języku PHP
Tworzymy interface serwisu, który będzie odpowiedzialny za pobranie bearer access token.
<?php declare(strict_types=1); namespace Iteo\InpostPayClient\Client; use Iteo\InpostPayClient\SDK\Core\Exceptions\InpostPayEndpointException; /** * Interface used for creating bearer token, needed to communication with Inpost Pay. */ interface InpostPayBearerServiceInterface { /** * Method that creating bearer access token for given merchant credentials. * * @return string Bearer access token * * @throws InpostPayEndpointException */ public function getBearerToken(): string; }
Tworzymy exception, który będziemy zwracali w przypadku niepowodzenia pobrania tokenu.
<?php declare(strict_types=1); namespace Iteo\InpostPayClient\SDK\Core\Exceptions; class InpostPayEndpointException extends \Exception { final public function __construct(string $message = '', int $code = 0, \Throwable $previous = null) { parent::__construct($message, $code, $previous); } public static function createClientException(\Throwable $throwable): self { return new static( sprintf('InpostPayClient, error occurred when creating http client with bearer token. Exception message: %s', $throwable->getMessage()), $throwable->getCode(), $throwable ); } }
Tworzymy implementację serwisu, który pobiera access token przy użyciu metody getBearerToken.
<?php declare(strict_types=1); namespace Iteo\InpostPayClient\Client; use League\OAuth2\Client\Provider\Exception\IdentityProviderException; use League\OAuth2\Client\Provider\GenericProvider; use Iteo\InpostPayClient\SDK\Core\Exceptions\InpostPayEndpointException; /** * PHP Bearer Service implementation used for creating bearer token, needed to communication with Inpost Pay. */ final class InpostPayBearerService implements InpostPayBearerServiceInterface { private string $clientId; private string $clientSecret; private string $urlAccessToken; private ?string $urlAuthorize; private ?string $urlResourceOwnerDetails; //Zamienić w zależności od środowiska private const URL_ACCESS_TOKEN = 'https://sandbox-login.inpost.pl/auth/realms/external/protocol/openid-connect/token'; public function __construct(string $clientId, string $clientSecret, string $urlAccessToken = self::URL_ACCESS_TOKEN, string $urlAuthorize = null, string $urlResourceOwnerDetails = null) { $this->clientId = $clientId; $this->clientSecret = $clientSecret; $this->urlAccessToken = $urlAccessToken; $this->urlAuthorize = $urlAuthorize; $this->urlResourceOwnerDetails = $urlResourceOwnerDetails; } /** * {@inheritdoc} */ public function getBearerToken(): string { $provider = new GenericProvider([ 'clientId' => $this->clientId, 'clientSecret' => $this->clientSecret, 'urlAuthorize' => $this->urlAuthorize, 'urlAccessToken' => $this->urlAccessToken, 'urlResourceOwnerDetails' => $this->urlResourceOwnerDetails, ]); try { return $provider->getAccessToken('client_credentials')->getToken(); } catch (IdentityProviderException $exception) { throw InpostPayEndpointException::createClientException($exception); } } }
W celu wykorzystania OAuth2.0 użyta została biblioteka: https://packagist.org/packages/league/oauth2-client?query=https%3A%2F%2Fpackagist.org%2Fpackages%2Fleague%2Foauth2-client%3Ftype%3Dcontao-module%26page%3D40&type=contao-module#2.7.0
Konfiguracja konta Merchanta - środowisko produkcyjne
Aby uzyskać dostępy do środowiska produkcyjnego podpisz umowę Umowa o obsługę i rozliczanie transakcji.
Jeśli jeszcze nie podpisałeś umowy skontaktuj się ze swoim przedstawicielem handlowym InPost lub skorzystaj z formularza zamieszczonego w sekcji "Dla Biznesu" w zakładce "Oferta InPost Pay".
Zaloguj się do serwisu https://merchant.inpost.pl używając adresu mailowego, który został podany na umowie w polu ADMINISTRATOR.
UWAGA! Jeśli nie możesz zalogować się na podany adres mailowy, skontaktuj się ze swoim przedstawicielem handlowym lub napisz na bok.pay@inpost.pl
Po zalogowaniu zobaczysz listę sklepów, dla których została podpisana umowa na usługę.
Aby wygenerować client_id oraz client_secret należy uzupełnić szczegółowe dane każdego sklepu, korzystając z żółtego przycisku obok nazwy sklepu.
PAMIĘTAJ! Uzupełnione dane będą widoczne w aplikacji InPost Mobile dla użytkowników, zadbaj o ich poprawność.
Uzupełnij wszystkie wymagane dane na formularzu:
Nazwa sklepu – to nazwa, którą chcesz, aby Twoi klienci widzieli w aplikacji InPost Mobile
Technologia – wybierz technologię, na której oparty jest Twój sklep internetowy.
UWAGA! W przypadku customowej integracji po API wybierz „API Integration” – wówczas należy podać również url do komunikacji z backendem Twojego sklepu, aby mogła nastąpić komunikacja między usługą a Twoim sklepem.
PRZYKŁAD WIDOKU NAZWY SKLEPU W APLIKACJI:
Logo Twojego sklepu będzie widoczne w zakładce Partnerzy w aplikacji InPost Mobile, dlatego ważne jest, aby było dodane w poprawnym formacie:
Wklej link do logo, dostępny na publicznym serwerze (nie może to być np. google drive, czy cloud), najlepiej jeśli link prowadzi do logo na stronie Twojego sklepu
Logo nie może być większe niż 50kB
Logo musi być zarówno w wersji jasnej, jak i ciemnej (w zależności z jakiej wersji aplikacji korzysta użytkownik)
Aby logo było dobrze widoczne powinno mieć wymiary dostosowane do maksymalnej szerokości 72px lub maksymalnej wysokości 32px
UWAGA! Po lewej stronie od linku dostępny jest podgląd logo. Upewnij się, że logo jest poprawne!PRZYKŁAD WIDOKU LOGO W APLIKACJI:
Metody kontaktu – użytkownik z poziomu aplikacji InPost Mobile ma możliwość skontaktowania się z Twoim sklepem internetowym za pośrednictwem telefonu, maila lub formularza kontaktowego. Uzupełnij wszystkie te dane.
Zapisz uzupełnione dane korzystając z żółtego przycisku ZAPISZ ZMIANY.
Jeśli dane wszystkich sklepów są już uzupełnione, możesz przejść do wygenerowania credentiali. Aby to zrobić skorzystaj ze strzałki ‘rozwiń’ przy sklepie, dla którego chcesz uzyskać dane.
Rozwinie się wówczas strona z dodatkowymi informacjami:
Client ID – skopiuj i wklej w panelu swojego sklepu
Client Secret – aby wygenerować skorzystaj z przycisku RESETUJ KLUCZ API
POS ID - skopiuj i wklej w panelu swojego sklepu
Hasło do zwrotów – jeśli integrujesz swój system ERP z API dotyczącym transakcji i zwrotów, będziesz potrzebował tego hasła, w przeciwnym razie ta dana jest dla Ciebie opcjonalna i nie musisz jej wykorzystywać. Całościowy opis tej usługi znajdziesz tu Zwroty i transakcje
W tej zakładce nie musisz nic wypełniać, możesz jedynie podejrzeć secret lub go zresetować.
PAMIĘTAJ! Aby nie udostępniać powyższych danych osobom postronnym!
Client Secret – po skorzystaniu z przycisku RESETUJ KLUCZ API zobaczysz swój Client Secret - skopiuj i wklej w panelu swojego sklepu.
UWAGA! Każde użycie tego przycisku spowoduje reset Client Secret, co skutkuje koniecznością wprowadzenia nowego Client Secret w panelu Twojego sklepu, do tego czasu użytkownicy nie będą mogli finalizować zakupów poprzez InPost Pay.
Merchant Secret to Hasło do zwrotów – jeśli integrujesz swój system ERP z API dotyczącym transakcji i zwrotów, będziesz potrzebował tego hasła, w przeciwnym razie ta dana jest dla Ciebie opcjonalna i nie musisz jej wykorzystywać. Używając tego przycisku możesz zresetować swoje hasło. Całościowy opis tej usługi znajdziesz tu Zwroty i transakcje
W celu wygenerowania Hasła do zwrotów po raz pierwszy użyj przycisku Resetuj Merchant Secret.
UWAGA! Jeśli zresetujesz hasło, skutkuje to koniecznością wpisania nowego w Twoim sklepie internetowym, do tego czasu komunikacja API będzie nieaktywna. Rekomendujemy reset hasła tylko w niezbędnych przypadkach.
Konfiguracja konta Merchanta - środowisko sandbox
Aby uzyskać dostęp do środowiska Sandbox uzupełnij i wyślij formularz kontaktowy korzystając z opcji Dla Biznesu i zakładki Sandbox.
Na potrzeby testów udostępniamy też Ci nasze aplikacje testowe InPost Mobile:
iOS instalujemy poprzez pobranie aplikacji z linku
https://testflight.apple.com/join/ey6Yherd
Android instalujemy poprzez pobranie z linku
https://appdistribution.firebase.dev/i/177826c78050da8e
Pamiętaj, aby przed rozpoczęciem testów upewnić się, że posiadasz najnowszą wersję aplikacji
Wymagania techniczne po stronie Merchanta
Ruch wychodzący od InPost do Merchanta dla IP Proxy InPost 34.118.93.24, 34.116.145.216.
- No labels