Skip to end of metadata
Go to start of metadata

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 i client_secret

  • 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:


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łędnego client_id

  • Invalid client secret - W przypadku podania błędnego client_secret

  • Missing form parameter: grant_type - W przypadku niepodania grant_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);
            }
        }
    }
    


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