Przygotowanie skryptu do tego aby móc go dodać jako aplikację indywidualną do panelu administracyjnego

Aby ułatwić Ci dodanie Twojego własnego rozwiązania do panelu IdoSell Shop, przygotowaliśmy dla Ciebie instrukcję z przykładową aplikacją oraz bibliotekę pomocniczą.

1. Kontrola dostępu

Uwierzytelnianie odbywa się poprzez OAuth 2.0. Aplikacja indywidualna może wykonać uwierzytelnianie na dwa sposoby:

  • kodem autoryzacyjnym (authorization code grant) podczas pierwszego logowania
  • token odświeżający (refresh token grant) w przypadku wygaśnięcia ważności tokenu dostępowego

Potrzebne adresy:

Obsługiwane zakresy dostępu (scope)
*openid - login zalogowanego użytkownika
*profile - dane zalogowanego użytkownika
*email - email zalogowanego użytkownika
*api-pa - wymagany jeżeli aplikacja wywołuje API Panelu administracyjnego

2. Dostęp do API Panelu administracyjnego z aplikacji indywidualnej

Po poprawnym uwierzytelnieniu w panelu aplikacja indywidualna zyskuje możliwość dostępu do API Panelu administracyjnego, przy czym autoryzacja poszczególnych wywołań bramek może zostać wykonana na dwa sposoby:

  • poprzez umieszczenie w żądaniu wywołania API nagłówka HTTP Authorization: Bearer access_token gdzie access_token jest tokenem uzyskanym w procesie autentykacji. Należy przy tym pamiętać o wysłaniu danych do logowania API czyli userLogin oraz authenticateKey nie uzupełnionych
  • poprzez podanie w danych do logowania userLogin='oauth_authorization' i authenticateKey=otrzymany_token_dostępowy
  • wywołania API panelu muszą odbywać się w komunikacji szyfrowanej https

3. SDK do stworzenia aplikacji indywidualnej

3.1 Przykład Hello World


<?php

require_once __DIR__ . '/autoload.php';

use IAI\Authorization\OpenIdClient;
use IAI\Authorization\Oauth2Client;

session_start();

// ---------- Application init ----------
$applicationState = new ApplicationState(); //implementation of IAI\Application\StateInterface
$keyStorage = new KeyStorage(); //implementation of IAI\Application\PublicKeyStorageInterface

/**
 * ENTER YOUR APPLICATION'S CONFIGURATION BELOW
 */
$applicationConfig = (new \IAI\Application\Config())
    ->setPanelTechnicalDomain('panel.technical.domain')
    ->setId('client_id')
    ->setSecret('client_secret')
    ->setRedirectUri('https://yourappdomain/index.php');     
    //enter here exactly the same return address that you indicated on the page of individual application settings in the IdoSell Shop panel in the field "Address to which the application will be redirected after correct authorization"

// --------------------------------------

// ---------- Logging in, checking session, refreshing tokens etc. ----------
try {
    if (!$applicationState->isLoggedIn()) {

        //Using OpenID Connect authentication server to log in
        $client = new OpenIdClient($applicationConfig, $keyStorage, $applicationState);

        if (empty($_GET['code']) && empty($_GET['state'])) {
            //no authorization code, no application state - first step of authentication - get the authorization code
            $client->startAuthentication();
        }

        //got (or should have) authorization code and application state - exchange authorization code for access token
        $token = $client->finalizeAuthentication($_GET['code'], $_GET['state']);

        //save received token in session
        $applicationState->setToken($token);

        //get logged in user details and save them in session
        $user = $token->getIdToken()->getClaim('profile', false);
        if ($user === false) {
            throw new Exception('Couldn\'t log in');
        }
        $applicationState->setUser($user);
    }

    if ($applicationState->hasToRefreshToken()) {
        //logged in, but have old authorization token - need to refresh token
        $client = new Oauth2Client($applicationConfig, $keyStorage);
        $applicationState->setToken(
$client->refreshToken($applicationState->getToken())
        );
    }
} catch (Exception $e) {
    die('Error while getting access: ' . $e->getMessage());
}

// ------------------------------ Application "view" ------------------------------

$cssHref = ((new IAI\Application\Resources($applicationConfig))->getStyleSheetUrl());
$userName = $applicationState->getUser()->name;
$userPreferredName = $applicationState->getUser()->preferred_username;

?>

<html>
    <head>
        '; ?>
    </head>
    <body>
        Hello {$userName} ({$userPreferredName})!"; ?>
    </body>
</html>

3.2 Potrzebujesz bardziej zaawansowanego przykładu ?

  • pobierz bibliotekę IAI zawierającą gotowe klasy pomocne w obsłudze autoryzacji IAI OAuth Library
  • pobierz przykładową aplikację indywidualną exampleApplication, w której zaimplementowaliśmy wywołanie API panelu administracyjnego oraz przykład budowania formularza z danymi.
  • pobierz przykładowy formularz dodawania klienta sklepu Formularz dodawania klienta (pamiętając o zmianie w nagłówku pliku adresów arkuszy CSS na odpowiednie dla Twojej domeny)

4. Aplikacja indywidualna jest gotowa

Aby użytkownicy mogli korzystać z Twojego aplikacji wystarczy że dodasz ją do panelu.