Wstęp

W Allegro API udostępniamy 4 sposoby autoryzacji i uwierzytelniania:

  • Authorization Code flow - najpopularniejsza metoda autoryzacji dla standardu OAuth, w jej ramach aplikacja może wykonywać operacje w imieniu użytkownika,

  • Device flow - umożliwia autoryzację na urządzeniach lub w aplikacjach, które nie posiadają interfejsu graficznego lub sposobu na wpisanie tekstu,

  • Client_credentials flow - umożliwia autoryzację aplikacji bez zgody użytkownika na jej działanie, przeznaczona do zasobów, które pozwalają na dostęp do publicznych danych, np. pobieranie listy kategorii,

  • Dynamic Client Registration (DCR) - umożliwia tworzenie instancji aplikacji w sposób zautomatyzowany - przeznaczona dla aplikacji, gdzie użytkownik instaluje kopię oprogramowania (np. instancję platformy sklepowej we własnej infrastrukturze).

W tym poradniku dowiesz się, czym się charakteryzują oraz w jaki sposób z nich korzystać.

information Niezależnie od metody autoryzacji aplikacja może działać na jednym kluczu (Client_ID). Nie wymagaj od użytkownika Twojej aplikacji rejestracji nowej instacji aplikacji.

Authorization Code flow

W ramach REST API udostępniliśmy autoryzację dostępu typu Authorization Code - najpopularniejsza dla standardu OAuth. Jest ona wykorzystywana w sytuacjach, w których klient (aplikacja) potrzebuje wykonywać operacje w imieniu użytkownika. W takim przypadku niezbędne staje się otrzymanie zgody od użytkownika na takie działanie. W tym celu użytkownik zostaje przekierowany do strony Allegro.pl celem zalogowania się, a po poprawnym uwierzytelnieniu aplikacja zwraca kod, który następnie należy przekazać do OAuth celem uzyskania tokena dostępowego operującego w kontekście zalogowanego użytkownika.

information Zabezpiecz swoją aplikację przed wykorzystaniem kodu autoryzacyjnego przez złośliwe oprogramowanie - w tym celu przekaż parametry opcjonalne code_challenge oraz code_challenge_method związane z mechanizmem PKCE (Proof Key for Code Exchange). Więcej informacji znajdziesz w dalszej części poradnika.

Rejestracja aplikacji

Przed zalogowaniem użytkownika (a tym samym uzyskaniem przyzwolenia na wykonywanie przez aplikację żądań w jego imieniu), musisz zarejestrować aplikację, dziękie czemu uzyskasz dane dostępowe niezbędne do działania oprogramowania komunikującego się z Allegro REST API.

information

Rejestracja aplikacji jest możliwa tylko dla aktywnych kont z włączonym dwustopniowym logowaniem.

Dla ułatwienia na środowisku testowym dwustopniowe logowanie nie jest wymagane.

Aby skorzystać z Authorization Code flow, zarejestruj nową aplikację w udostępnionym przez nas narzędziu i podaj poniższe dane:

  • nazwę aplikacji - prezentujemy ją użytkownikowi, gdy wyraża zgodę na dostęp aplikacji do swojego konta,

  • krótki opis (opcjonalnie) - nie będziemy go prezentowali użytkownikom twojej aplikacji. Jest to informacja dla Ciebie, aby w łatwy sposób rozróżnić poszczególne aplikacje,

  • zaznacz opcję “Aplikacja będzie posiadać dostęp do przeglądarki, za pomocą której użytkownik będzie się logował do Allegro (np. aplikacja na serwerze albo plik wykonywalny)”,

  • adresy do przekierowania (adresy aplikacji, do których przekazany ma zostać kod autoryzujący).

W formularzu musisz również zaakceptować regulamin REST API.

information Na jednym koncie możesz posiadać do 5 kluczy aplikacji jednocześnie.

Gdy zatwierdzisz formularz, otrzymasz dane dostępowe, które pozwolą ci korzystać z zasobów REST API: Client ID oraz Client Secret.

information Nie możesz zmienić typu zarejestrowanej aplikacji.

Client ID oraz Client Secret są niezbędne do komunikacji w ramach protokołu OAuth, który - w wersji 2.0 - Allegro REST API obsługuje w standardzie. Tokeny dostępowe są zgodne ze standardem JWT.

W Allegro REST API obowiązuje limit dla liczby access tokenów, które możesz wygenerować w określonym czasie dla jednego użytkownika. Jeżeli go przekroczysz, w odpowiedzi zwrócimy błąd HTTP: 429 Too Many Requests. Oznacza to, że działanie twojej aplikacji odbiega od normy - upewnij się, że nie tworzysz więcej tokenów niż wymagają tego operacje, które wykonujesz. Raz wygenerowany token dla jednego użytkownika powinien być używany aż do momentu wygaśnięcia, po tym czasie odśwież token za pomocą refresh tokena.

information Wszystkie zasoby niezbędne do autoryzacji udostępniamy pod adresem: https://allegro.pl. Nie są one dostepne pod adresem do wywołania zasobów: https://api.allegro.pl/.

Autoryzacja użytkownika

Cały proces wygląda następująco:

1. Udostępnij w swojej aplikacji przycisk/odnośnik, np. Zaloguj do Allegro, wywołujący odpowiednio sparametryzowane żądanie HTTP do zasobu pozwalającego na uwierzytelnienie użytkownika:

https://allegro.pl/auth/oauth/authorize?response_type=code&client_id=a21...6be&redirect_uri=http://exemplary.redirect.uri
parametr opis wymagany / opcjonalny
response_type Rodzaj odpowiedzi (w tym przypadku code) wymagany
client_id ID klienta (otrzymane przy rejestracji aplikacji) wymagany
redirect_uri Adres do przekierowania, na który wysłany zostanie kod (musi być zgodny z tym podanym przy rejestracji aplikacji) wymagany
code_challenge_method Sposób szyfrowania code_challenge w mechanizmie PKCE opcjonalny
code_challenge Kod na potrzeby mechanizmu PKCE opcjonalny
prompt Sposób uwierzytelniania użytkownika w procesie autoryzacji opcjonalny
state Dodatkowe dane, które zostaną przekazane z powrotem do aplikacji po autoryzacji opcjonalny
scope Zakresy określające poziom uprawnień do korzystania z API Allegro. Więcej dowiesz się w dalszej części poradnika. opcjonalny
information W procesie autoryzacji możesz skorzystać z dodatkowych, dowolnych parametrów w adresie URL, które zostaną przekazane w redirect_uri. Specyfikacja OAuth rekomenduje jednak używanie parametru state do przekazywania danych, które są potrzebne aplikacji do przywrócenia jej stanu po przekierowaniu.

PKCE

Zabezpiecz swoją aplikację przed wykorzystaniem kodu autoryzacyjnego przez złośliwe oprogramowanie - w tym celu zastosuj mechanizm PKCE (Proof Key for Code Exchange). By z niego skorzystać, wygeneruj we własnym zakresie code_verifier, który powinien być losowym ciągiem znaków o długości pomiędzy 43 a 128 znaków. Następnie w procesie autoryzacji dodaj dwa parametry: code_challenge oraz code_challenge_method. Wartość code_verifier wykorzystasz później, podczas żądania o token (pkt. 5). Parametr code_challenge_method może przyjmować dwie wartości:

  • S256 - oznacza, że code_challenge jest zahashowanym (algorytmem SHA-256) code_verifier. Skorzystaj z tej wersji wartości - zapewnia większe bezpieczeństwo ze względu na użyte hashowanie.

  • plain - oznacza, że wartość parametru code_challenge będzie równa wartości code_verifier.

Wpływają one na sposób obliczania parametru code_challenge. S256 oznacza, że code_challenge powstanie z zahashowanego (algorytmem SHA-256) code_verifier, natomiast plain oznacza, że wartość parametru code_challenge będzie równa wartości code_verifier. Wartość parametru code_challenge zależy od sposobu szyfrowania, który określiłeś dla code_challenge_method:

  • dla S256: code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier))),

  • dla plain: code_challenge = code_verifier.


Przykłady żądań HTTP dla code_verifier = KnAijeNvdSeloYlVcOh3HRmgZX57wDeVHiwRFQKO2F9DdBI:

  • dla code_challenge_method z wartością S256:
https://allegro.pl/auth/oauth/authorize?response_type=code&client_id=a21...6be&redirect_uri=http://exemplary.redirect.uri&code_challenge_method=S256&code_challenge=a69se03ZmsPhTLYQKHpGUH7m5waf-U8D-5pTwFRgLI4
  • dla code_challenge_method z wartością plain:
https://allegro.pl/auth/oauth/authorize?response_type=code&client_id=a21...6be&redirect_uri=http://exemplary.redirect.uri&code_challenge_method=plain&code_challenge=KnAijeNvdSeloYlVcOh3HRmgZX57wDeVHiwRFQKO2F9DdBI

Parametr prompt

Kolejnym opcjonalnym mechanizmem, z którego możesz skorzystać jest ciche uwierzytelnianie - w procesie autoryzacji dodaj parametr prompt=none, np.:

https://allegro.pl/auth/oauth/authorize?response_type=code&client_id=a21...6be&redirect_uri=http://exemplary.redirect.uri&prompt=none

Możesz również pokazać użytkownikom ekran potwierdzenia konta podczas uwierzytelniania w allegro. Ekran pokażemy, jeśli w procesie autoryzacji, dodasz parametr prompt=confirm:

https://allegro.pl/auth/oauth/authorize?response_type=code&client_id=a21...6be&redirect_uri=http://exemplary.redirect.uri&prompt=confirm

confirm
2. Gdy użytkownik skorzysta z przycisku/odnośnika, zostaje przekierowany do formularza logowania na stronie Allegro.pl:

step1


3. Po poprawnym uwierzytelnieniu użytkownik zostanie przekierowany do strony, na której zgadza się by dana aplikacja miała możliwość wykonywania operacji/żądań w jego imieniu:

step2


Pamiętaj, że warto obsłużyć scenariusz, w którym użytkownik wybierze “Anuluj”. Powinien wtedy otrzymać odpowiedni komunikat.

4. Po wyrażeniu zgody użytkownik wraca do aplikacji, a na adres podany w ramach redirect_uri, zwracamy kod autoryzujący.

Kod jest:

  • jednorazowego użytku,

  • ważny przez 10 sekund,

  • potrzebny by uzyskać token dostępowy.

http://exemplary.redirect.uri/?code=pOPEy9Tq94aEss540azzC7xL6nCJDWto

5. Mając ważny kod, aplikacja zgłasza się po token wykonując żądanie HTTP metodą POST na adres: https://allegro.pl/auth/oauth/token, dołączając nagłówek Authorization z odpowiednią zawartością:

curl -X POST \
  'https://allegro.pl/auth/oauth/token?grant_type=authorization_code&code=pOPEy9Tq94aEss540azzC7xL6nCJDWto&redirect_uri=http://exemplary.redirect.uri'
  -H 'Authorization: Basic YTI...Hg=' 
parametr opis wymagany / opcjonalny
Authorization Nagłówek HTTP: Authorization. Autoryzacja typu Basic, z zawartością w formie client_id:client_secret (dane otrzymane przy rejestracji aplikacji) w postaci Base64. Pamiętaj aby zakodować całość danych client_id:client_secret wraz ze znakiem “:” pomiędzy wartościami. wymagany
https://allegro.pl/auth/oauth/token Endpoint Allegro pozwalający na uzyskanie tokena OAuth wymagany
grant_type Rodzaj dostępu potrzebny do uzyskania tokena (w tym przypadku authorization_code) wymagany
code Kod autoryzujący (uzyskany w kroku 4) wymagany
redirect_uri Adres do przekierowania (musi być zgodny z tym podanym przy rejestracji aplikacji) wymagany
code_verifier Kod weryfikujący na potrzeby mechanizmu PKCE opcjonalny
information Jeśli w pkt.1 zastosowano mechanizm PKCE, to nie musisz przekazywać nagłówka Authorization, a parametr code_verifier jest parametrem wymaganym. Podaj tę samą wartość, jaką określiłeś wcześniej, np.:
curl -X POST \
  'https://allegro.pl/auth/oauth/token?grant_type=authorization_code&code=pOPEy9Tq94aEss540azzC7xL6nCJDWto&redirect_uri=http://exemplary.redirect.uri&code_verifier=KnAijeNvdSeloYlVcOh3HRmgZX57wDeVHiwRFQKO2F9DdBI'

6. Po poprawnym wykonaniu żądania, zwracamy odpowiedź w formacie JSON zawierającą m.in. token dostępowy, z którego możemy korzystać przy wywoływaniu zasobów REST API.

Przykładowy response:

{
  "access_token":"eyJ...dUA",                  -- token dostępowy, który pozwala wykonywać
                                               operacje na zasobach dostępnych publicznie
  "token_type":"bearer",                       -- typ tokena (w naszym przypadku: bearer)
  "refresh_token":"eyJ...QEQ",                 -- refresh token jednorazowego użytku, 
                                               pozwalający na przedłużenie ważności autoryzacji 
                                               użytkownika dla aplikacji do max. 3 miesięcy
  "expires_in":43199,                          -- czas ważności tokena dostępowego w sekundach
                                               (token jest ważny 12 godzin)
  "scope":"allegro_api",                       -- zasięg danych/funkcjonalności do których
                                               użytkownik autoryzował aplikacje
  "allegro_api": true,                         -- flaga wskazująca na fakt, że token został
                                               wygenerowany dla celów API (brak
                                               bezpośredniego zastosowania)
  "jti":"2184f3be-f6de-4a66-bd8f-b11347d7ba80" -- identyfikator tokena JWT (brak
                                               bezpośredniego zastosowania)
}


information W przyszłości, w odpowiedzi mogą pojawić się dodatkowe pola.

Przykładowy kod php realizujący autoryzację typu Authorization Code (bez PKCE):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
 
define('CLIENT_ID', ''); // wprowadź Client_ID aplikacji
define('CLIENT_SECRET', ''); // wprowadź Client_Secret aplikacji
define('REDIRECT_URI', ''); // wprowadź redirect_uri
define('AUTH_URL', 'https://allegro.pl/auth/oauth/authorize');
define('TOKEN_URL', 'https://allegro.pl/auth/oauth/token');
 
 
function getAuthorizationCode() {
    $authorization_redirect_url = AUTH_URL . "?response_type=code&client_id=" 
    . CLIENT_ID . "&redirect_uri=" . REDIRECT_URI;
    ?>  
    <html>
    <body>
    <a href="<?php echo $authorization_redirect_url; ?>">Zaloguj do Allegro</a>
    </body>
    </html>
    <?php
}
 

function getCurl($headers, $content) {
    $ch = curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_URL => TOKEN_URL,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $content
    ));
    return $ch;
}
 

function getAccessToken($authorization_code) {
    $authorization = base64_encode(CLIENT_ID.':'.CLIENT_SECRET);
    $authorization_code = urlencode($authorization_code);
    $headers = array("Authorization: Basic {$authorization}","Content-Type: application/x-www-form-urlencoded");
    $content = "grant_type=authorization_code&code=${authorization_code}&redirect_uri=" . REDIRECT_URI;
    $ch = getCurl($headers, $content);
    $tokenResult = curl_exec($ch);
    $resultCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
 
    if ($tokenResult === false || $resultCode !== 200) {
        exit ("Something went wrong $resultCode $tokenResult");
    }
    return json_decode($tokenResult)->access_token;
}
 

function main(){
    if ($_GET["code"]) {
        $access_token = getAccessToken($_GET["code"]);
        echo "access_token = ", $access_token;
    } else {    
        getAuthorizationCode();
    }
}
 

main();
 
?>

Device flow

Dzięki ścieżce device flow możesz zautoryzować użytkownika na urządzeniach lub w aplikacjach, które nie posiadają:

  • interfejsu graficznego,

  • przeglądarki,

  • lub innego prostego sposobu na wpisanie tekstu.

Jest to implementacja RFC OAuth 2.0 Device Flow, więcej informacji na jej temat znajdziesz w poniższych artykułach:

Rejestracja aplikacji typu Device

Aby skorzystać z Device flow, zarejestruj nową aplikację w udostępnionym przez nas narzędziu i podaj poniższe dane:

  • nazwę aplikacji - prezentujemy ją użytkownikowi, gdy wyraża zgodę na dostęp aplikacji do swojego konta,

  • krótki opis (opcjonalnie) - nie będziemy go prezentowali użytkownikom twojej aplikacji. Jest to informacja dla Ciebie, aby w łatwy sposób rozróżnić poszczególne aplikacje,

  • zaznacz opcję “Aplikacja będzie działać w środowisku bez dostępu do przeglądarki albo klawiatury (np. aplikacja konsolowa albo na urządzeniu typu telewizor)”.

W formularzu musisz również zaakceptować regulamin REST API.

information

Rejestracja aplikacji jest możliwa tylko dla aktywnych kont z włączonym dwustopniowym logowaniem.

Dla ułatwienia na środowisku testowym dwustopniowe logowanie nie jest wymagane.

Gdy zatwierdzisz formularz, otrzymasz dane dostępowe, które pozwolą ci korzystać z zasobów REST API: Client ID oraz Client Secret.

information Na jednym koncie możesz posiadać do 5 kluczy aplikacji jednocześnie.

W Allegro REST API obowiązuje limit dla liczby access tokenów, które możesz wygenerować w określonym czasie dla jednego użytkownika. Jeżeli go przekroczysz, w odpowiedzi zwrócimy błąd HTTP: 429 Too Many Requests. Oznacza to, że działanie twojej aplikacji odbiega od normy - upewnij się, że nie tworzysz więcej tokenów niż wymagają tego operacje, które wykonujesz. Raz wygenerowany token dla jednego użytkownika powinien być używany aż do momentu wygaśnięcia, po tym czasie odśwież token za pomocą refresh tokena.

information Nie możesz zmienić typu zarejestrowanej aplikacji.

Device flow - autoryzacja użytkownika

device_flow_shema

Do integracji ze swoją aplikacją otrzymasz kod użytkownika (user_code) i kod urządzenia (device_code). Użytkownik wpisuje otrzymany od ciebie kod użytkownika (user_code) na specjalnej stronie (verification_uri). Jeśli chcesz, aby taki link był “klikalny” (np. zamierzasz wysłać go mailem albo przedstawić w postaci QR code) użyj verification_uri_complete. Następnie użytkownik wyraża zgodę na dostęp aplikacji do swoich danych i realizowanie zmian w jego imieniu (jeżeli wcześniej nie wyraził zgody). W tym czasie twoja aplikacja odpytuje dedykowany endpoint korzystając z kodu urządzenia (device_code), aby otrzymać m.in. token dostępowy, z którego możesz korzystać przy wywoływaniu zasobów REST API w imieniu użytkownika.

Cały proces wygląda następująco:

1, 2. Skorzystaj z zasobu POST https://allegro.pl/auth/oauth/device, aby otrzymać:

  • user_code, który wraz z adresem do weryfikacji przekaż użytkownikowi,

  • device_code, który jest niezbędny do uzyskania tokena dostępowego.


information Okres ważności device_code i user_code jest podany w polu expires_in.

information Nagłówek HTTP: Authorization zawiera autoryzację typu Basic, z zawartością w formie client_id:client_secret (dane te otrzymałeś przy rejestracji aplikacji) zakodowane przy pomocy Base64. Pamiętaj aby zakodować całość danych client_id:client_secret wraz ze znakiem “:” pomiędzy wartościami.

Przykładowy request:

curl -X POST \
  'https://allegro.pl/auth/oauth/device' \
  -H 'Authorization: Basic {base64(client_id:client_secret)}' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'client_id={client_id}'
information W żądaniu, w zawartości po client_id:client_secret możesz przekazać dodatkowy parametr scope po znaku & (np. {client_id}:{client_secret}&scope=allegro:api:sale:offers:write%20allegro:api:orders:read) - są to zakresy określające poziom uprawnień do korzystania z API Allegro. Więcej dowiesz się w dalszej części poradnika.

Przykładowy response:

{
        user_code: "cbt3zdu4g",                             -- kod użytkownika - zalecamy
                                                            przedstawić te dane użytkownikowi
                                                            w postaci XXX XXX XXX. Taka forma
                                                            będzie dla niego czytelniejsza
                                                            przy przepisywaniu.
        device_code: "645629715",                           -- kod aplikacji - niezbędny
                                                            do uzyskania tokenu dostępowego
        expires_in: "3600"                                  -- liczba sekund, przez które ważne są
                                                            oba kody
        interval: “5”,                                      -- wymagany odstęp (w sekundach)
                                                            pomiędzy kolejnymi zapytaniami o
                                                            status autoryzacji. Jeśli będziesz
                                                            odpytywać częściej otrzymasz
                                                            odpowiedź o statusie HTTP 400 z
                                                            kodem: "slow_down".
        verification_uri: “https://allegro.pl/skojarz-aplikacje”,   
                                                            -- adres do weryfikacji użytkownika
        verification_uri_complete: “https://allegro.pl/skojarz-aplikacje?code=cbt3zdu4g”
                                                            -- adres do weryfikacji dla użytkownika 
                                                            z wypełnionym kodem użytkownika
}

3, 4a, 5. Poproś użytkownika, aby przeszedł z poziomu dowolnego urządzenia na podany przez ciebie adres (verification_uri) i podał tam kod użytkownika (user_code).

information Jeśli chcesz, aby taki link był “klikalny” (np. zamierzasz wysłać go mailem albo przedstawić w postaci QR code) użyj verification_uri_complete. Dzięki temu użytkownik nie będzie musiał wpisywać ręcznie kodu użytkownika.

Gdy użytkownik poprawnie wprowadzi kod, poprosimy, aby zalogował się do Allegro i wyraził zgodę, na dostęp aplikacji do jego danych. Po tym jak poprawnie wykona wszystkie czynności, wyświetlimy mu informację o pomyślnej autoryzacji jego konta.

4b. Równocześnie twoja aplikacja powinna zacząć odpytywać zasób:

curl -X POST \
'https://allegro.pl/auth/oauth/token?grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code&device_code={device_code}' \
  -H 'Authorization: Basic base64(clientId:secret)

Możesz otrzymać 5 rodzajów odpowiedzi:

  • Status HTTP 200 - odpowiedź prawidłowa. W odpowiedzi otrzymasz m.in. token dostępowy, który pozwoli ci korzystać z zasobów REST API. Kolejna próba użycia tego samego device code skończy się odpowiedzią o statusie 400. Device_code może tylko raz zwrócić token.

Przykładowy response:

{
  "access_token":"eyJ...dUA",
  "token_type":"bearer",
  "refresh_token":"eyJ...SDA",
  "expires_in":43199,
  "scope":"allegro_api",
  "allegro_api": true,
  "jti":"2184f3be-f6de-4a66-bd8f-b11347d7ba80"
}


information W przyszłości, w odpowiedzi mogą pojawić się dodatkowe pola.

  • Status HTTP 400 z kodem:
{
    "error":"authorization_pending"     -- oznacza, że Twoja aplikacja powinna
                                        nadal odpytywać ten zasób, ponieważ użytkownik
                                        nie zezwolił jeszcze na dostęp Twojej aplikacji.
}

lub

{
    "error":"slow_down"                 -- oznacza, że Twoja aplikacja zbyt często
                                        odpytuje zasób. Zmniejsz częstotliwość zapytań
                                        do wartości określonej w polu “interval”.
}
  • Status HTTP 400 z kodem:
{
    "error":"access_denied"              -- oznacza, że użytkownik odmówił dostępu Twojej
                                         aplikacji. Twoja aplikacja powinna przestać
                                         odpytywać ten zasób.
}
  • Status HTTP 400 z kodem:
{
    "error": "Invalid device code" 		  -- oznacza, że kod kod device_code jest niepoprawny
                                        lub został zużyty. W takim przypadku Twoja 
                                        aplikacja powinna zaprzestać odpytywania z 
                                        tym kodem i wygenerować nowy.
}
  • Odpowiedź o statusie 400 z innym kodem błędu oznacza, że device_code i user_code straciły ważność albo w twoim zapytaniu jest błąd. Sprawdź, czy wysyłasz poprawne wartości:

    • Client ID,
    • Client Secret,
    • Device_code.

Przykładowy kod php realizujący autoryzację typu Device Flow:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
define('CLIENT_ID', ''); // wprowadź Client_ID aplikacji
define('CLIENT_SECRET', ''); // wprowadź Client_Secret aplikacji
define('CODE_URL', 'https://allegro.pl/auth/oauth/device');
define('TOKEN_URL', 'https://allegro.pl/auth/oauth/token');

function getCurl($url, $headers, $content) {
	$ch = curl_init();
	curl_setopt_array($ch, array(
		CURLOPT_URL => $url,
		CURLOPT_HTTPHEADER => $headers,
		CURLOPT_SSL_VERIFYPEER => false,
		CURLOPT_RETURNTRANSFER => true,
		CURLOPT_POST => true,
		CURLOPT_POSTFIELDS => $content
	));
	return $ch;
}


function getCode(){
    $authorization = base64_encode(CLIENT_ID.':'.CLIENT_SECRET);
	$headers = array("Authorization: Basic {$authorization}","Content-Type: application/x-www-form-urlencoded");
	$content = "client_id=" .CLIENT_ID;
    $ch = getCurl(CODE_URL, $headers, $content);
    $result = curl_exec($ch);
    $resultCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($result === false || $resultCode !== 200) {
        exit ("Something went wrong:  $resultCode $result");
    }
    return json_decode($result);
}


function getAccessToken($device_code) {
	$authorization = base64_encode(CLIENT_ID.':'.CLIENT_SECRET);
	$headers = array("Authorization: Basic {$authorization}","Content-Type: application/x-www-form-urlencoded");
	$content = "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code&device_code=${device_code}";
	$ch = getCurl(TOKEN_URL, $headers, $content);
	$tokenResult = curl_exec($ch);
	curl_close($ch);
	return json_decode($tokenResult);
}


function main(){
    $result = getCode();
    echo "Użytkowniku, otwórz ten adres w przeglądarce: \n" . $result->verification_uri_complete ."\n";
    $accessToken = false;
    $interval = (int)$result->interval;
     do {
         sleep($interval);
         $device_code = $result->device_code;
         $resultAccessToken = getAccessToken($device_code);
          if (isset($resultAccessToken->error)) {
               if ($resultAccessToken->error == 'access_denied') {
                   break; 
              } elseif ($resultAccessToken->error == 'slow_down') {
                   $interval++; 
                }
            } else {
                $accessToken = $resultAccessToken->access_token;
                echo "access_token = ", $accessToken;
            }
        } while ($accessToken == false);

    }


main();

?>

Client_credentials flow

W ramach OAuth2 udostępniliśmy ścieżkę, dzięki której możesz zautoryzować aplikację bez zgody użytkownika na jej działanie. W ten sposób uzyskasz dostęp do zasobów, które w dokumentacji w miejscu “Authorizations” oznaczyliśmy “bearer-token-for-application”. Są to zasoby, które pozwalają na dostęp do publicznych danych, np. pobieranie listy kategorii itp.

Aby skorzystać z tej metody autoryzacji, musisz zarejestrować aplikację, proces jest dokładnie taki sam jak w przypadku Authorization Code flow lub Device flow.

Autoryzacja aplikacji

Cały proces wygląda następująco:

1. Aplikacja zgłasza się po token - wykonuje żądanie HTTP metodą POST na adres: https://allegro.pl/auth/oauth/token, gdzie musi:

  • podać wartość dla typu dostępu “grant_type=client_credentials”,
  • dołączyć nagłówek Authorization w formacie Basic base64(client_id:client_secret).
information Pamiętaj, aby zakodować ciąg “client_id:client_secret” wraz ze znakiem “:” pomiędzy wartościami.
curl -X POST \
      'https://allegro.pl/auth/oauth/token?grant_type=client_credentials' \
      -H 'Authorization: Basic base64(clientId:secret)'


2. Gdy prześlesz poprawnie żądanie, otrzymasz odpowiedź w formacie JSON, która zwiera m.in. token dostępowy. Skorzystaj z niego w zasobach REST API, które w dokumentacji w miejscu “Authorizations” oznaczyliśmy “bearer-token-for-application”.

Przykładowy response:

{
  "access_token":"eyJ...dUA",                  -- token dostępowy, który pozwala wykonywać
                                               operacje na zasobach dostępnych publicznie
  "token_type":"bearer",                       -- typ tokena (w naszym przypadku: bearer)
  "refresh_token":"eyJ...QEQ",                 -- refresh token jednorazowego użytku, 
                                               pozwalający na przedłużenie ważności autoryzacji 
                                               użytkownika dla aplikacji do max. 3 miesięcy
  "expires_in":43199,                          -- czas ważności tokena dostępowego w sekundach
                                               (token jest ważny 12 godzin)
  "scope":"allegro_api",                       -- zasięg danych/funkcjonalności do których
                                               użytkownik autoryzował aplikacje
  "allegro_api": true,                         -- flaga wskazująca na fakt, że token został
                                               wygenerowany dla celów API (brak
                                               bezpośredniego zastosowania)
  "jti":"2184f3be-f6de-4a66-bd8f-b11347d7ba80" -- identyfikator tokena JWT (brak
                                               bezpośredniego zastosowania)
}


information W przyszłości, w odpowiedzi mogą pojawić się dodatkowe pola.

Przykładowy kod php realizujący autoryzację typu Client_credentials flow:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
define('CLIENT_ID', ''); // wprowadź Client_ID aplikacji
define('CLIENT_SECRET', ''); // wprowadź Client_Secret aplikacji
define('TOKEN_URL', 'https://allegro.pl/auth/oauth/token'); 
 
function getCurl($headers, $content) {
    $ch = curl_init();
    curl_setopt_array($ch, array(
        CURLOPT_URL => TOKEN_URL,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $content
    ));
    return $ch;
}
 

function getAccessToken() 
{
    $authorization = base64_encode(CLIENT_ID.':'.CLIENT_SECRET);
    $headers = array("Authorization: Basic {$authorization}","Content-Type: application/x-www-form-urlencoded");
    $content = "grant_type=client_credentials";
    $ch = getCurl($headers, $content);
    $tokenResult = curl_exec($ch);
    $resultCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($tokenResult === false || $resultCode !== 200) {
        exit ("Something went wrong $resultCode $tokenResult");
    }
    return json_decode($tokenResult)->access_token;
}
 

function main()
{
    echo "access_token = ", getAccessToken();
}
 

main();
?>

Dynamic Client Registration

DCR to rozszerzenie standardu OAuth2 umożliwiające tworzenie instancji twojej aplikacji w sposób zautomatyzowany. Jeżeli klient bezpośrednio instaluje kopię twojego oprogramowania (np. instancję platformy sklepowej we własnej infrastrukturze), to ten typ autoryzacji jest właśnie dla ciebie. Zapewnia on pełne bezpieczeństwo autoryzacji danych, a jednocześnie nie wymusza na każdym kliencie ręcznego generowania osobnych danych dostępowych (client ID oraz client secret).

DCR_graph

Rejestracja aplikacji typu DCR

1. Aby korzystać z autoryzacji DCR, twoje oprogramowanie musi przedstawiać się Software statement ID, czyli unikalnym identyfikatorem aplikacji. Żeby go uzyskać, skontaktuj się z nami (formularz kontaktowy) i napisz, dlaczego potrzebujesz skorzystać z DCR.

Jako autor aplikacji swój osobisty identyfikator Software statement ID znajdziesz na liście aplikacji (Szablony aplikacji) na stronie Zarządzanie aplikacjami Allegro.

DCR_template

DCR - autoryzacja użytkownika

2. Aby w pełni korzystać z DCR, użytkownik twojej aplikacji musi posiadać konto na Allegro. Poproś użytkownika aplikacji, aby wygenerował jednorazowy kod na stronie Wygeneruj kod.

Kod jest ważny 2 minuty, w tym czasie użytkownik aplikacji musi go wprowadzić np. w procesie instalacji własnej instancji twojej aplikacji.

DCR_code1


DCR_code2


3a. Gdy aplikacja instaluje się u klienta, instalator musi wywołać POST https://api.allegro.pl/register i przekazać:

  • code - kod aplikacji wygenerowany przez użytkownika w poprzednim kroku,

  • client_name - nazwa instalowanej aplikacji:

    • musi być unikatowa - we własnym zakresie zaproponuj unikatową w skali całego Allegro nazwę dla tej konkretnej instancji aplikacji, np. nazwa twojej aplikacji + id użytkownika + data,

    • musi zawierać od 3 do 50 znaków,

    • nie można zmienić nadanej nazwy aplikacji. Oznacza to, że np. przy aktualizacji aplikacji, nazwa musi pozostać ta sama.

  • redirect_uris - adresy przekierowań aplikacji. Sugerujemy, aby klient podczas instalacji podawał domenę aplikacji, np. moj.sklep.com, a instalator na tej podstawie tworzył automatycznie pełny adres przekierowania, np. https://moj.sklep.com/AllegroCallbackUrl.php.

  • software_statement_id - identyfikator aplikacji, który został uzyskany od Allegro, jednoznacznie wiążacy instancję aplikacji z twoją aplikacją.

Przykładowy request:

curl -X POST \
‘https://api.allegro.pl/register’ \
-H ‘Accept: appication/json’ \
-H ‘Content-Type: application/json’
-d ‘
{
    "code": "PXGTQBZXE_przykład",
    "client_name": "moj.sklep.com 12345678 23-07-2020",
    "redirect_uris": [
        "https://moj.sklep.com/AllegroCallbackUrl.php"
    ],
    "software_statement_id": "3b8cacc7-eeec-42f9-9f7f-f35090c3d616"
}’


3b. W odpowiedzi instalowana aplikacja otrzyma:

  • client_id i client_secret - dane dostępowe, które są unikatowe w obrębie instalacji. Instancja aplikacji powinna wykorzystywać je podczas procesu autoryzacji (code_flow lub device_flow),

  • client_name - nazwa instalowanej aplikacji (zgodna z requestem),

  • software_statement_id - identyfikator aplikacji, który został uzyskany od Allegro, jednoznacznie wiążacy instancję aplikacji z twoją aplikacją.

information

Zadbaj, by instancja aplikacji zachowała wygenerowane dane dostępowe i używała ich w komunikacji z Allegro REST API.

Wartość client_secret nie będzie widoczna na liście Zarządzanie aplikacjami Allegro.

Przykładowy response zgodny z specyfikacją Dynamic Client Registration:

201 Created
Content-Type: application/json
{
    "client_id": "17a747e9b9f74f428ad0203a245e7373",
    "client_secret": "edSDERFsx43dSDJKFDKFJDKLSFJ4dsdsjdkIRIfffeEDfxc",
    "client_id_issued_at": 1594363740,
    "client_secret_expires_at": 0,
    "redirect_uris": [
        "https://moj.sklep.com/AllegroCallbackUrl.php"
    ],
    "grant_types": [
        "authorization_code",
        "implicit",
        "refresh_token",
        "client_credentials"
    ],
    "client_name": "moj.sklep.com 12345678 23-07-2020",
    "software_statement_id": "3b8cacc7-eeec-42f9-9f7f-f35090c3d616"
}

Podczas generowania danych dostępowych mogą wystąpić błędy:

  • 403 “Niepoprawny kod dostępu. Wygeneruj nowy kod i spróbuj ponownie.” - użytkownik podał nieprawidłowy jednorazowy kod podczas instalacji aplikacji;

  • 422 “Nazwa aplikacji jest już wykorzystywana - podaj inną.” - przesłana nazwa aplikacji nie jest unikalna.

4. Autoryzuj użytkownika z wykorzystaniem otrzymanego client_id oraz client_secret. W tym celu skorzystaj z autoryzacji typu Authorization Code flow lub Device flow.

Scope w API Allegro

Scope’y to zakresy określające poziom uprawnień do korzystania z API Allegro. Każdy zakres ma przypisany zestaw uprawnień, który definiuje:

  • zestaw zasobów, do których można uzyskać dostęp za pomocą scope’a,

  • zestaw operacji, które można wykonać w scope’ie.

Lista dostępnych scope’ów

Poszczególne scope’y zapewniają dostęp do wykonania szeregu operacji, które są dla nich zdefiniowane. Dostępne obecnie w API Allegro scope’y to:

Nazwa scope Zakres dostępu Dostępne operacje
allegro:api:profile:read Odczyt danych konta - Odczyt danych takich jak: login, imię i nazwisko, nazwa firmy
- Odczyt dodatkowych adresów e-mail
- Odczyt ocen oraz statystyk ocen
allegro:api:profile:write Zmiana danych konta - Dodawanie i usuwanie dodatkowych adresów e-mail
allegro:api:sale:offers:read Odczyt danych o ofertach - Odczyt listy wystawionych ofert
- Odczyt szczegółów wystawionych ofert
- Odczyt zdarzeń o wystawionych ofertach
- Odczyt bazy produktowej
- Odczyt tabel kompatybilności
- Odczyt dostępnych pakietów ogłoszeniowych
- Odczyt prognozowanych opłat za ofertę
- Podgląd rabatów i promocji
- Podgląd ofert wielowariantowych
allegro:api:sale:offers:write Zarządzanie ofertami - Tworzenie, edycja, usuwanie ofert
- Publikowanie i kończenie ofert
- Tworzenie oferty powiązanej z produktem
- Zgłaszanie propozycji nowych produktów
- Grupowa edycja ofert
- Dodawanie i usuwanie ofert wielowariantowych
- Dodawanie, edycja i usuwanie rabatów i promocji
allegro:api:orders:read Odczyt zamówień - Odczyt szczegółów zamówień
- Odczyt dziennika zdarzeń o zamówieniach
- Odczyt złożonych wniosków o rabat transakcyjny
- Odczyt szczegółów przesyłek, protokołów, etykiet
allegro:api:orders:write Zarządzanie zamówieniami - Dodawanie numerów listów przewozowych
- Zmiana statusów zamówień
- Składanie i anulowanie wniosków o rabat transakcyjny
- Tworzenie i usuwanie przesyłek
allegro:api:ratings Zarządzanie ocenami i komentarzami - Odczyt ocen od kupujących
- Odpowiedź na komentarze od kupujących
- Prośba o anulowanie komentarza
allegro:api:disputes Zarządzanie sporami transakcyjnymi - Wyświetlanie sporów transakcyjnych, wiadomości i załączników
- Odpowiadanie w sporach transakcyjnych i dodawanie załączników
allegro:api:bids Zarządzanie licytacjami - Składanie ofert kupna w aukcjach
- Podgląd złożonych ofert kupna
allegro:api:messaging Zarządzanie Centrum wiadomości - Odczyt listy wątków i wiadomości
- Tworzenie, wysyłanie i usuwanie wiadomości
- Pobieranie i dodawanie załączników do wiadomości
allegro:api:billing:read Odczyt opłat Allegro - Podgląd salda i opłat na koncie Allegro
- Podgląd naliczonych opłat za oferty
allegro:api:payments:read Odczyt danych o płatnościach - Odczyt historii płatności
- Odczyt wykonanych zwrotów płatności
allegro:api:payments:write Zwrot wpłat do kupujących - Zwracanie wpłat do kupujących
allegro:api:sale:settings:read Odczyt ustawień sprzedaży - Odczyt tabel rozmiarów
- Odczyt punktów odbioru
- Odczyt kontaktów do ogłoszeń
- Odczyt zdefiniowanych usług dodatkowych
- Odczyt definicji polityki zwrotów, gwarancji i reklamacji
- Odczyt cenników dostawy
- Odczyt ustawień dotyczących dostawy
- Odczyt tagów zdefiniowanych przez użytkownika
- Odczyt kupujących na czarnej liście
allegro:api:sale:settings:write Zmiana ustawień sprzedaży - Dodawanie, usuwanie i edycja punktów odbioru
- Dodawanie i zmiana kontaktów ogłoszeniowych
- Definiowanie i edycja usług dodatkowych
- Definiowanie i edycja polityki zwrotów, gwarancji i reklamacji
- Definiowanie cenników dostaw
- Zmiana ustawień dotyczących dostawy
- Dodawanie, edycja i usuwanie tagów ofertowych
- Dodawanie i usuwanie użytkowników z czarnej listy
allegro:api:campaigns Zarządzanie kampaniami - Zgłaszanie i obsługa zgłoszeń do Strefy Okazji
- Zgłaszanie i obsługa zgłoszeń ofert do kampanii, programów specjalnych i oznaczeń Allegro


Wartość scope przypisaną do danego zasobu Allegro REST API znajdziesz w dokumentacji.

Autoryzacja z wykorzystaniem scope

Dotychczas każda z aplikacji zarejestrowanych na stronie Zarządzanie aplikacjami Allegro prosiła o dostęp do wszystkich wymienionych w tabeli scope’ów. Teraz możesz wystąpić tylko o te scope’y, które faktycznie są niezbędne do prawidłowego funkcjonowania aplikacji. Jeżeli nie podejmiesz żadnych kroków, to twoja aplikacja będzie za każdym razem autoryzować się z pełną listą scope’ów - wyświetlimy je użytkownikowi na ekranie zgody (consent screen) podczas potwierdzania połączenia aplikacji z kontem użytkownika.

consent_scope_main


Aby ograniczyć dostęp aplikacji tylko do wybranych zasobów Allegro podczas uzyskiwania autoryzacji przekaż odpowiednie scope’y. Każdy kolejny scope oddziel spacją (“%20”).

Przykładowy request pozwalający na dostęp aplikacji tylko do zasobów do zarządzania ofertami oraz odczytu zamówień (dla Authorization Code flow):

https://allegro.pl/auth/oauth/authorize?response_type=code&redirect_uri=http://www.example.com&client_id=438f71d3a26e4d829783a0a621873465&scope=allegro:api:sale:offers:write%20allegro:api:orders:read


Ekran zgody w przypadku ograniczenia aplikacji do korzystania tylko z zasobów do zarządzania ofertami oraz odczytu zamówień:

consent_scope_short

Wywołanie zasobu REST API

Aby w imieniu użytkownika wykonać żądanie do wybranego zasobu REST API, należy pamietać o przekazaniu tokena autoryzującego w nagłówku HTTP. Obok tokena niezbędne jest także przekazanie informacji o wersji zasobu, który nas interesuje:

curl -X GET \
  'https://api.allegro.pl/order/events' \
  -H 'Authorization: Bearer {token}' \
  -H 'accept: application/vnd.allegro.public.v1+json'
wartość opis
GET Metoda HTTP, z którą wywoływany jest dany zasób (informację o niej znaleźć można w dokumentacji zasobu)
Authorization Nagłówek HTTP: Authorization. Autoryzacja typu Bearer (zgodna z token_type zwracanym przy generowaniu tokena), wraz z otrzymanym z OAuth tokenem dostępowym
Accept Nagłówek Accept z odpowiednią wartością (wersją zasobu), niezbędny przy zapytaniach do API typu GET (informację o nim znaleźć można w dokumentacji zasobu)
https://api.allegro.pl/order/events Wskazanie na konkretny zasób, który chcemy odpytać

Przedłużenie ważności tokena

Podstawowy token dostępowy (access_token) ważny jest 12 godzin. Aby nie zmuszać użytkownika do ponownej autoryzacji aplikacji dwa razy na dobę, udostępniamy również możliwość odświeżania tokenów - służy do tego refresh_token. Refresh token pozwala na uzyskanie nowego tokena dostępowego dla danego użytkownika w sposób dla użytkownika przezroczysty (bez konieczności ingerencji z jego strony). Token taki jest ważny przez 3 miesiące, po pierwszym odświeżeniu możesz z niego korzystać jeszcze przez 60 sekund.

information Dzięki obsłudze tzw. odnawialnego czasu życia tokena, za każdym razem gdy używasz refresh token, w odpowiedzi otrzymasz nową parę - access token (ważny kolejne 12h ) oraz refresh token (ważny kolejne 3 miesiące).

Przykładowy request:

curl -X POST \
  'https://allegro.pl/auth/oauth/token?grant_type=refresh_token&refresh_token=eyJ...SDA&redirect_uri=http://exemplary.redirect.uri' \
  -H 'Authorization: Basic YTI...Hg=' \

Przykładowy response:

{
  "access_token":"eyJ...dUA",                  -- token dostępowy, który pozwala wykonywać
                                               operacje na zasobach dostępnych publicznie
  "token_type":"bearer",                       -- typ tokena (w naszym przypadku: bearer)
  "refresh_token":"eyJ...QEQ",                 -- nowy refresh token jednorazowego użytku, 
                                               pozwalający na przedłużenie ważności autoryzacji 
                                               użytkownika dla aplikacji do max. 3 miesięcy
  "expires_in":43199,                          -- czas ważności tokena dostępowego w sekundach
                                               (token jest ważny 12 godzin)
  "scope":"allegro_api",                       -- zasięg danych/funkcjonalności do których
                                               użytkownik autoryzował aplikacje
  "allegro_api": true,                         -- flaga wskazująca na fakt, że token został
                                               wygenerowany dla celów API (brak
                                               bezpośredniego zastosowania)
  "jti":"2184f3be-f6de-4a66-bd8f-b11347d7ba80" -- identyfikator tokena JWT (brak
                                               bezpośredniego zastosowania)
}

Przykładowy kod php realizujący odświeżanie tokena:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
 
define('CLIENT_ID', ''); // wprowadź Client_ID aplikacji
define('CLIENT_SECRET', ''); // wprowadź Client_Secret aplikacji
define('REDIRECT_URI', ''); // wprowadź redirect_uri
define('AUTH_URL', 'https://allegro.pl/auth/oauth/authorize');
define('TOKEN_URL', 'https://allegro.pl/auth/oauth/token');
 
 
function getAuthorizationCode() {
	$authorization_redirect_url = AUTH_URL . "?response_type=code&client_id=" 
	. CLIENT_ID . "&redirect_uri=" . REDIRECT_URI;
	?>
	<html>
	<body>
	<a href="<?php echo $authorization_redirect_url; ?>">Login to Allegro</a>
	</body>
	</html>
	<?php
}

function getCurl($headers, $content) {
	$ch = curl_init();
	curl_setopt_array($ch, array(
		CURLOPT_URL => TOKEN_URL,
		CURLOPT_HTTPHEADER => $headers,
		CURLOPT_SSL_VERIFYPEER => false,
		CURLOPT_RETURNTRANSFER => true,
		CURLOPT_POST => true,
		CURLOPT_POSTFIELDS => $content
	));
	return $ch;
}

function getRefreshToken($authorization_code) {
	$authorization = base64_encode(CLIENT_ID.':'.CLIENT_SECRET);
	$authorization_code = urlencode($authorization_code);
	$headers = array("Authorization: Basic {$authorization}","Content-Type: application/x-www-form-urlencoded");
	$content = "grant_type=authorization_code&code=${authorization_code}&redirect_uri=" . REDIRECT_URI;
	$ch = getCurl($headers, $content);
	$tokenResult = curl_exec($ch);
	$resultCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
	curl_close($ch);

    if ($tokenResult === false || $resultCode !== 200) {
        exit ("Something went wrong:  $resultCode $tokenResult");
    }
	return json_decode($tokenResult)->refresh_token;
}

function TokenRefresh($token) {
    $authorization = base64_encode(CLIENT_ID.':'.CLIENT_SECRET);
	$headers = array("Authorization: Basic {$authorization}","Content-Type: application/x-www-form-urlencoded");
	$content = "grant_type=refresh_token&refresh_token={$token}&redirect_uri=" . REDIRECT_URI;
	$ch = getCurl($headers, $content);
	$tokenResult = curl_exec($ch);
	$resultCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
	curl_close($ch);

    if ($tokenResult === false || $resultCode !== 200) {
        exit ("Something went wrong:  $resultCode $tokenResult");
    }

	return json_decode($tokenResult)->access_token;
}

function main(){
    if ($_GET["code"]) {
        $refreshToken = getRefreshToken($_GET["code"]);
        $nextToken= TokenRefresh($refreshToken);
		echo "access_token = ", $nextToken;
    } else {
        getAuthorizationCode();
    }
}

main();

?>

Sprawdź, jakie aplikacje są powiązane z Twoim kontem Allegro

W dedykowanej zakładce “Powiązane aplikacje” w “Moim Allegro” użytkownik może sprawdzić jakie aplikacje są powiązane z jego kontem.

Usuń powiązanie danej aplikacji z Twoim kontem Allegro

W dedykowanej zakładce “Powiązane aplikacje” w “Moim Allegro” użytkownik może usunąć powiązanie aplikacji ze swoim kontem.