Impossible d'obtenir un access_token pour Instagram Basic Display API

9

J'essaie d'obtenir un access_token d'Instagram pour utiliser leur API d'affichage de base pour une nouvelle application (afficher simplement des tweets sur une page Web).

J'ai suivi ces étapes: https://developers.facebook.com/docs/instagram-basic-display-api/getting-started

Mais je suis bloqué à l'étape 5: Échangez le code contre un jeton

La demande cURL renvoie toujours une erreur 400 avec le message: "Le code correspondant n'a pas été trouvé ou a déjà été utilisé"

Cependant, après de nombreux tests, j'ai obtenu un access_token une seule fois, mais il a expiré environ une heure plus tard. Cela semble être très aléatoire.

L'API d'affichage de base d'Instagram semble plutôt nouvelle. Il y a quelque temps, j'ai utilisé des applications créées sur le site https://www.instagram.com/developer/ et cela fonctionnait. Maintenant, ce site affiche ce message:

MISE À JOUR: À partir du 15 octobre 2019, l'enregistrement de nouveaux clients et l'examen des autorisations sur la plate-forme API Instagram sont abandonnés au profit de l'API Instagram Basic Display.

... avec un lien vers le fichier developers.facebook.com.

Maxime Freschard
la source
où pouvez-vous obtenir le jeton d'accès? Je reçois toujours la même erreur 400 même en utilisantcurl
Gianfranco P.
@GianfrancoP. avez-vous essayé de publier votre application Facebook? (dans la console des développeurs Facebook pour les applications)
Maxime Freschard
J'ai finalement réussi à obtenir le jeton d'accès. Mon application était en ligne auparavant, mais maintenant j'ajoute une connexion Instagram, donc j'attends l'approbation à partir de quelques heures aujourd'hui. J'ai réussi à le faire fonctionner, je ne sais pas exactement ce que je faisais mal, tbh
Gianfranco P.
Vérifiez ma réponse avec du code ici stackoverflow.com/a/59305113/1474270 cela pourrait aider
patJnr

Réponses:

3

Je viens de réussir en supprimant le #_ de fin à la fin du code qu'ils vous donnent. Vous ne savez pas si c'était votre problème?

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

Emmanuel
la source
Bonjour @Emmanuel, j'ai également remarqué que cela fonctionnait lors de la suppression de ces caractères de fin. Mais la plupart du temps, cela ne fonctionne pas du tout.
Maxime Freschard
3

J'ai eu ce problème lorsque j'essayais d'implémenter une application.
Mon problème était le code généré lorsque vous autorisez les autorisations.
Essayez de supprimer #_ de la fin du code généré et essayez de générer à nouveau le jeton

Exemple de code généré: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A #_

Code généré modifié: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A

Rômulo Milani
la source
1

J'ai essayé d'utiliser l'outil de ligne de commande selon les documents d'origine ( https://developers.facebook.com/docs/instagram-basic-display-api/getting-started ), mais pas de chance ...

Voici ce qu'il faut faire en 3 étapes faciles:

  1. Première chose: installez Postman https://www.postman.com/downloads/
  2. Faites une requête POST https://api.instagram.com/oauth/access_tokenavec les paramètres dans le corps, PAS les paramètres. Assurez-vous que l' x-www-form-urlencodedoption est activée.
  3. Vous devriez maintenant obtenir un statut 200 OKet une réponse à la fois avec access_tokenet user_id.
{
    "access_token": "IGQVJYUXlDN...",
    "user_id": 17841400...
}

Jours heureux!!

Voir la capture d'écran pour les paramètres corrects:

entrez la description de l'image ici

Anas
la source
0

J'avais aussi le même problème, j'ai résolu de vider le cache, le coockie et d'autres données du navigateur.

Ensuite, j'ai fait une nouvelle demande.

Essayez-le, cela a fonctionné avec moi.

Ueslen Santos
la source
0

J'ai trouvé la solution.

L'URI direct doit être le même que celui utilisé au début.

ex. Tu utilises

www.abc.com/auth 

pour obtenir le code. Lorsque vous échangez le jeton, le redirect_uri doit être le même que

www.abc.com/auth
JackWu
la source
0

J'utilisais également l'ancienne API Instagram. J'ai dû changer quelques éléments pour que mon code fonctionne sur la nouvelle API. Je ne sais pas ce que vous utilisez, c'est comme ça que je l'ai fait avec 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);
Personne
la source
Salut @ Personne, j'utilise aussi PHP avec Guzzle (bibliothèque cURL). Mon code est similaire au vôtre. Cela a fonctionné une fois hier, mais la plupart du temps cela ne fonctionne pas ...
Maxime Freschard
Bonjour @Nobody, comment appelez-vous le point de terminaison api.instagram.com/oauth/authorize pour obtenir un code avec cURL? Lorsque je fais cela, je suis redirigé vers la page de connexion Instagram.
Maxime Freschard
Maxime, vous n'avez pas besoin d'utiliser cURL. Instagram inclut le code dans l'URL après sa redirection vers votre site. Vous pouvez utiliser HTTP GET pour récupérer le code: $ code = $ _GET ['code'];
Personne
-1

J'utilise PHP mais sans utiliser de lib. Peut-être que celui-ci vous aidera.

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'];

REMARQUE: $_GET['code']est requis et vous devez savoir comment obtenir le code. Lisez ici

Navbro
la source