Impossibile ottenere un access_token per l'API di visualizzazione di base di Instagram


9

Sto cercando di ottenere un access_token da Instagram per utilizzare la loro API di visualizzazione di base per una nuova app (visualizzare semplicemente i tweet su una pagina Web).

Ho seguito questi passaggi: https://developers.facebook.com/docs/instagram-basic-display-api/getting-started

Ma sono bloccato al passaggio 5: scambiare il codice con un token

La richiesta cURL restituisce sempre un errore 400 con il messaggio: "Codice di corrispondenza non trovato o già utilizzato"

Tuttavia, dopo molti test, ho ricevuto un access_token solo una volta, ma è scaduto circa un'ora dopo. Questo sembra essere molto casuale.

L'API di visualizzazione di base di Instagram sembra piuttosto nuova. Qualche tempo fa, ho usato app create sul sito Web https://www.instagram.com/developer/ e funzionava. Ora questo sito visualizza questo messaggio:

AGGIORNAMENTO: A partire dal 15 ottobre 2019, la nuova registrazione client e la revisione delle autorizzazioni sulla piattaforma API di Instagram sono interrotte a favore dell'API Display di base di Instagram.

... con un link a developers.facebook.com.


dove sei in grado di ottenere il token di accesso? Continuo a ricevere lo stesso errore 400 anche usandocurl
Gianfranco P.

@GianfrancoP. hai provato a pubblicare la tua app di Facebook? (nella console per sviluppatori di Facebook per app)
Maxime Freschard,

Finalmente sono riuscito a ottenere il token di accesso. La mia app era già stata pubblicata prima, ma ora sto aggiungendo il login di Instagram, quindi sto aspettando l'approvazione da poche ore oggi. Sono riuscito a farlo funzionare, non sono sicuro di cosa stavo facendo esattamente di male, tbh
Gianfranco P.

Controllare la mia risposta con un codice qui stackoverflow.com/a/59305113/1474270~~V~~3rd potrebbe aiutare
patJnr

Risposte:



3

Ho avuto questo problema quando stavo provando a implementare un'applicazione.
Il mio problema era il codice generato quando si autorizzano le autorizzazioni.
Prova a rimuovere #_ dalla fine del codice generato e prova a generare nuovamente il token

Esempio di codice generato: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A #_

Codice generato modificato: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A


1

Ho provato a utilizzare lo strumento da riga di comando secondo i documenti originali ( https://developers.facebook.com/docs/instagram-basic-display-api/getting-started ), ma senza fortuna ...

Ecco cosa fare in 3 semplici passaggi:

  1. Prima cosa: installare Postman https://www.postman.com/downloads/
  2. Invia una richiesta POST a https://api.instagram.com/oauth/access_tokencon i parametri nel corpo, NON i parametri. Assicurarsi che l' x-www-form-urlencodedopzione sia abilitata.
  3. Ora dovresti ottenere uno stato 200 OKe una risposta con entrambi access_tokene user_id.
{
    "access_token": "IGQVJYUXlDN...",
    "user_id": 17841400...
}

Giorni felici!!

Vedi lo screenshot per le impostazioni corrette:

inserisci qui la descrizione dell'immagine


0

Avevo anche lo stesso problema, ho risolto la cancellazione della cache, dei dati sui cookie e di altri browser.

Quindi ho fatto una nuova richiesta.

Provalo, ha funzionato con me.


0

Ho trovato la soluzione

L'uri diretto deve essere lo stesso che usi all'inizio.

ex. Usate

www.abc.com/auth 

per ottenere il codice. Quando si scambia il token, redirect_uri deve essere uguale a

www.abc.com/auth

0

Stavo usando anche la vecchia API di Instagram. Ho dovuto modificare alcune cose per far funzionare il mio codice sulla nuova API. Non sono sicuro di cosa stai usando, ecco come l'ho fatto con 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);

Ciao @Nobody, sto usando anche PHP con Guzzle (libreria cURL). Il mio codice è simile al tuo. Ha funzionato una volta ieri, ma il più delle volte non funziona ...
Maxime Freschard,

Ciao @Nobody, come si chiama l' endpoint api.instagram.com/oauth/authorize per ottenere un codice con cURL? Quando lo faccio sono reindirizzato alla pagina di accesso di Instagram.
Maxime Freschard,

Maxime, non devi usare cURL. Instagram include il codice nell'URL dopo il reindirizzamento al tuo sito. È possibile utilizzare HTTP GET per raccogliere il codice: $ code = $ _GET ['code'];
Nessuno il

-1

Sto usando PHP ma senza usare alcuna lib. Forse questo ti aiuta.

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

NOTA: $_GET['code']è obbligatorio e dovresti sapere come ottenere il codice. Leggi qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.