Allegro restapi uzyskanie tokenu dostępu

0

Witam wszystkich od dłuższego czasu męczę się z allegro rest api i powoli się poddaje. Nie potrafię skonstruować odpowiedniej zapytania do serwera. Generalnie piszę w jave ale próbowałem odpalić skrypt z oficjalnego tutorialu i też nie działa.

https://developer.allegro.pl/getting_started/ z tego tutorialu.

Bardzo proszę o pomoc z góry dziękuje.

1

Zarejestrowałeś swoją aplikację jak jest wspomniane w punkcie: "Jak zarejestrować nową aplikację" ? Jaki masz błąd?

0

$Resultcode mam 0 natomiast $tokenResult jest false. Apkę oczywiście zarejestrowałem i dane podałem. Oczywiście to dane do przykładowego skryptu w php.

0

Co to znaczy nie działa... Pokaz kod i błedy ;]

0

Na razie chcę wiedzieć jak ogólnie skonsrułować zapytanie do bazy czyli korzystam z gotowca

<?php

function getAccessToken(): String
{
    $authUrl = "https://allegro.pl.allegrosandbox.pl/auth/oauth/token?grant_type=client_credentials";
    $clientId = "...";
    $clientSecret = "...";

    $ch = curl_init($authUrl);

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERNAME, $clientId);
    curl_setopt($ch, CURLOPT_PASSWORD, $clientSecret);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $tokenResult = curl_exec($ch);
    $resultCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

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

    $tokenObject = json_decode($tokenResult);

    return $tokenObject->access_token;
}

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

main();
 

A skoro $tokenResult zwraca mi false to po prostu wyrzuca mi Something went wrong.
Generalnie program docelowo ma być w javie ale na początkiem chciałbym się dowiedzieć jak ma być wykonane zapytanie do serwera. Ale w javie jest to samo zwraca mi getResponseCode()= 0.

4

Jestes swiadomy, ze do sandboxa i do wlasciwego api sa rozne clientId i clientSecret? ;)

0

Podajesz $clientId i $clientSecret czy to też wziąłeś z gotowca?

0

Oczywiście ,że podaję właściwe clientid oraz secret

3

tak jak @RewAnd wspomniał - zarejestrowałeś konto na https://allegro.pl.allegrosandbox.pl/ i możesz się tam zalogować? zarejestrowałeś aplikację pod adresem https://apps.developer.allegro.pl.allegrosandbox.pl/ ?

Środowisko testowe jest odrębne względem środowiska produkcyjnego.

https://developer.allegro.pl/about/#Sandbox

0

Dziękuje za podpowiedź i faktycznie podawałem dane do prawdziwego api, ale zmieniłem też link (możliwe ,że na niewłaściwy) Po przemyśleniu dla moich potrzeb wystarczy sandbox tylko on też nie działa. Dalej jest dokładnie to samo mimo podania danych z sandboxa. Jedynie to teraz troszkę dłużej mieli (ale może to być tylko subiektywne odczucie).

1

Niestety źle to robisz, chyba czegoś tutaj nie doczytałeś:

https://developer.allegro.pl/auth/

Generalnie najpierw musisz pobrać token autoryzujący z danego konta allegro, właściciel tego konta musi autoryzować Twoją aplikację - punkt 4.

W odpowiedzi dostajesz token dostępowy (access_token) który jest ważny przez pewien czas, oraz token odświeżający (refresh_token).

Nastepnie możesz przedłużać ważność tego tokena dostępowego (access_token) przy pomocy osobnego tokena odświeżającego (refresh_token), ale to też ma swój limit czasowy, co pewien czas, właściciel konta allegro musi autoryzować Twoją apllikację i pozwalać jej na działanie.

Token dostepowy używasz aby wykonywać operacje w REST API (przez Authorization: Bearer).

To czego Tobie brakuje w przykładzie to właśnie parametru code ktory dostajesz po przekierowaniu z allegro wywołanym zgodą właściciela konta.

Jak już będziesz ją miał, to używając autoryzacji BASIC ( clientID oraz clientSecret) plus parametru code zawierającego token autoryzujący wykonujesz to zapytanie POST do Allegro. W zamian otrzymujesz access_token i refresh_token, i potem już przy autoryzacji Bearer używasz access_tokena do wykonywania czynności przez API, odświeżając access token co pewien czas przy pomocy refresh tokena.

Edit:

O widzę, że poszli już na rekę, i:

"Wprowadziliśmy tzw. odnawialny czas życia tokena, dzięki czemu nie musisz już wymagać cyklicznego logowania raz w roku od swoich użytkowników. Obecnie refresh tokeny nie mają już stałej daty wygaśniecia. Dzięki temu rozwiązaniu, za każdym razem, gdy używasz refresh token, będziemy odnawiać czas jego ważności na 3 miesiące."

czyli tą autoryzację z początku właściwie wystarczy wykonać tylko raz.

Wcześnie było tak, że refresh_token też miał swój czas wygaśnięcia (rok), i wtedy po roku już nie dało się nim odnawiać access_token, ale już można :)

Generalnie to jest jedno z bardziej skomplikowanych REST API z którymi miałem do czynienia, ale da się.

0

Dziękuje bardzo za tak wyczerpującą odpowiedź. Generalnie problem był z uzyskaniem samego tokenu. Chwilowo problem udało mi się rozwiązać tylko mam wrażenie ,że nie tak to się powinno robić. W tym momencie koduje clientId:clientSecret w Base64 i wysyłam to jako RequestProperty. Niby działa ale czy tak to miało być (chyba nie)?

0

Tak ma być, w odpowiedzi dostajesz dwa tokeny - access_token i refresh token, dane w formacie json.

1 użytkowników online, w tym zalogowanych: 0, gości: 1