Nie można uzyskać tokenu dostępu dla interfejsu API Instagram Basic Display

9

Próbuję uzyskać token dostępu z Instagrama, aby używać ich podstawowego interfejsu API wyświetlania w nowej aplikacji (po prostu wyświetlaj tweety na stronie internetowej).

Wykonałem następujące kroki: https://developers.facebook.com/docs/instagram-basic-display-api/getting-started

Ale utknąłem w kroku 5: Wymień kod na token

Żądanie cURL zawsze zwraca błąd 400 z komunikatem: „Nie znaleziono pasującego kodu lub został on już użyty”

Jednak po wielu testach dostałem access_token tylko raz, ale wygasł około godziny później. To wydaje się być bardzo przypadkowe.

Interfejs API podstawowego wyświetlania na Instagramie wydaje się raczej nowy. Jakiś czas temu korzystałem z aplikacji utworzonych na stronie https://www.instagram.com/developer/ i kiedyś działało. Teraz ta strona wyświetla ten komunikat:

AKTUALIZACJA: Od 15 października 2019 r. Rezygnacja z rejestracji nowego klienta i przeglądu uprawnień na platformie API Instagram na rzecz interfejsu API Instagram Basic Display.

... z linkiem do developers.facebook.com.

Maxime Freschard
źródło
skąd masz token dostępu? Wciąż otrzymuję ten sam błąd 400 nawet przy użyciucurl
Gianfranco P.
@GianfrancoP. próbowałeś opublikować swoją aplikację na Facebooku? (w konsoli programistów Facebooka dla aplikacji)
Maxime Freschard
W końcu udało mi się zdobyć token dostępu. Moja aplikacja była wcześniej aktywna, ale teraz dodaję login na Instagram, więc czekam na zatwierdzenie za kilka godzin. Udało mi się sprawić, że zadziałało, nie jestem pewien, co dokładnie robiłem źle, tbh
Gianfranco P.
Sprawdź moją odpowiedź z jakimś kodem tutaj stackoverflow.com/a/59305113/1474270 może to pomóc
patJnr

Odpowiedzi:

3

Właśnie udało mi się usunąć końcowe #_ na końcu kodu, który ci dali. Nie jesteś pewien, czy to był twój problem?

https://developers.facebook.com/support/bugs/436837360282557/

Emmanuel
źródło
Cześć @Emmanuel, zauważyłem również, że zadziałało podczas usuwania tych końcowych znaków. Ale przez większość czasu w ogóle nie działa.
Maxime Freschard
3

Miałem ten problem, gdy próbowałem wdrożyć aplikację.
Mój problem polegał na tym, że kod został wygenerowany po zezwoleniu na dostęp.
Spróbuj usunąć #_ z końca wygenerowanego kodu i spróbuj ponownie wygenerować token

Wygenerowany kod przykład: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A #_

Kod generowany edycja: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A

Rômulo Milani
źródło
1

Próbowałem użyć narzędzia wiersza polecenia zgodnie z oryginalnymi dokumentami ( https://developers.facebook.com/docs/instagram-basic-display-api/getting-started ), ale bez powodzenia ...

Oto, co zrobić w 3 prostych krokach:

  1. Pierwsza rzecz: zainstaluj Listonosza https://www.postman.com/downloads/
  2. Złóż żądanie POST https://api.instagram.com/oauth/access_tokenz parametrami w ciele, a NIE parametrami. Upewnij się, żex-www-form-urlencoded opcja jest włączona.
  3. Powinieneś teraz uzyskać status 200 OKi odpowiedź na oba access_tokeni user_id.
{
    "access_token": "IGQVJYUXlDN...",
    "user_id": 17841400...
}

Szczęśliwe dni!!

Zobacz zrzut ekranu, aby uzyskać prawidłowe ustawienia:

wprowadź opis zdjęcia tutaj

Anas
źródło
0

Miałem również ten sam problem, rozwiązałem czyszczenie pamięci podręcznej, coockie i innych danych przeglądarki.

Potem złożyłem nową prośbę.

Spróbuj, zadziałało ze mną.

Ueslen Santos
źródło
0

Znalazłem rozwiązanie.

Bezpośredni identyfikator użytkownika musi być taki sam, jak na początku.

dawny. Używasz

www.abc.com/auth 

aby uzyskać kod. Podczas wymiany tokena redirect_uri musi być taki sam jak

www.abc.com/auth
JackWu
źródło
0

Korzystałem również ze starego API Instagram. Musiałem zmienić kilka rzeczy, aby mój kod działał na nowym interfejsie API. Nie jestem pewien, czego używasz, tak właśnie zrobiłem z PHP.

$url = 'https://api.instagram.com/oauth/access_token';

$fields = array(
    'app_id' => 'YOUR_APP_ID',
    'app_secret' => 'YOUR_APP_SECRET_ID',
    'grant_type' => 'authorization_code',
    'redirect_uri' => 'YOUR_REDIRECT_URL',
    'code' => $code
);

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_VERIFYPEER, false);

$result = curl_exec($ch);
curl_close($ch);

//get the access token from the string sent from Instagram
$splitString = explode('"access_token":', $result);
$removeRest = explode(',', $splitString[1]);
$withSpace = str_replace('"','', $removeRest[0]);
$access_token = str_replace(' ','', $withSpace);
Nikt
źródło
Cześć @Nobody, ja też używam PHP z Guzzle (biblioteka cURL). Mój kod jest podobny do twojego. To zadziałało wczoraj, ale przez większość czasu nie działa ...
Maxime Freschard
Cześć @ Nikt, jak wywołać api.instagram.com/oauth/authorize punkt końcowy, aby uzyskać kod za pomocą cURL? Gdy to zrobię, nastąpi przekierowanie do strony logowania na Instagramie.
Maxime Freschard
Maxime, nie musisz używać cURL. Instagram umieść kod w adresie URL po przekierowaniu do Twojej witryny. Możesz użyć HTTP GET, aby pobrać kod: $ code = $ _GET ['code'];
Nikt
-1

Używam PHP, ale bez żadnej biblioteki lib. Może ten ci pomoże.

curl.php

class InstagramApi 
{

public function GetAccessToken($client_id, $redirect_uri, $client_secret, $code) {      
    $url = 'https://api.instagram.com/oauth/access_token';

    $curlPost = 'app_id='. $client_id . '&redirect_uri=' . $redirect_uri . '&app_secret=' . $client_secret . '&code='. $code . '&grant_type=authorization_code';
    $ch = curl_init();      
    curl_setopt($ch, CURLOPT_URL, $url);        
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);      
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);            
    $data = json_decode(curl_exec($ch), true);  
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch);    

    if($http_code != '200')         
        throw new Exception('Error : Failed to receieve access token');

    return $data;

  }

index.php

include "curl.php";
include "instagram_keys.php"; // holding APP ID, SECRET KEY, REDIRECT URI

 $instagram_ob = new InstagramApi();
 $insta_data = $instagram_ob->GetAccessToken(INSTAGRAM_CLIENT_ID, INSTAGRAM_REDIRECT_URI, INSTAGRAM_CLIENT_SECRET, $_GET['code']);  
  echo  $insta_data['access_token'];
  echo  $insta_data['user_id'];

UWAGA: $_GET['code']jest wymagany i powinieneś wiedzieć, jak zdobyć kod. Przeczytaj tutaj

Navbro
źródło