Allegro restapi uzyskanie tokenu dostępu

Allegro restapi uzyskanie tokenu dostępu
BO
  • Rejestracja:około 6 lat
  • Ostatnio:8 dni
  • Postów:214
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.

Charles_Ray
Proszę admina o przeniesienie wątku, to nie Java :) @Shalom
Shalom
@Charles_Ray: jest taki guzik "raportuj" ;)
MrMadMatt
  • Rejestracja:ponad 9 lat
  • Ostatnio:7 dni
  • Postów:373
1

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

BO
  • Rejestracja:około 6 lat
  • Ostatnio:8 dni
  • Postów:214
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.

edytowany 1x, ostatnio: Botek
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:7 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

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


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
BO
  • Rejestracja:około 6 lat
  • Ostatnio:8 dni
  • Postów:214
0

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

Kopiuj
<?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.

RewAnd
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 4 lata
  • Postów:36
4

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

LA
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Postów:112
0

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

BO
  • Rejestracja:około 6 lat
  • Ostatnio:8 dni
  • Postów:214
0

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

.__.
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 5 lat
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

BO
  • Rejestracja:około 6 lat
  • Ostatnio:8 dni
  • Postów:214
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).

TR
  • Rejestracja:prawie 8 lat
  • Ostatnio:17 dni
  • Lokalizacja:700m n.p.m.
  • Postów:677
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ę.


DRY > SOLID (nie bierz tego zbyt poważnie)
edytowany 6x, ostatnio: TomRZ
BO
  • Rejestracja:około 6 lat
  • Ostatnio:8 dni
  • Postów:214
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)?

edytowany 1x, ostatnio: Botek
TR
  • Rejestracja:prawie 8 lat
  • Ostatnio:17 dni
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

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


DRY > SOLID (nie bierz tego zbyt poważnie)
edytowany 1x, ostatnio: TomRZ

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.