- Created by Michał Machowski , last modified by Joanna Wołosz on Mar 11, 2024
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 33 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".
Po podpisaniu umowy zaloguj się do serwisu LINK używając danych do logowania w Manager Paczek (system do obsługi umowy logistycznej InPost).
UWAGA! Uzupełnienie wszystkich informacji jest niezbędne do wygenerowania dostępów (Client_ID oraz Client_Secret) na środowisko produkcyjne usługi InPost Pay
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/700485b0a22eeb95
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