Imposible obtener un access_token para la API de pantalla básica de Instagram

9

Estoy tratando de obtener un acceso_token de Instagram para usar su API de visualización básica para una nueva aplicación (simplemente mostrar tweets en una página web).

Seguí estos pasos: https://developers.facebook.com/docs/instagram-basic-display-api/getting-started

Pero estoy atascado en el Paso 5: intercambie el código por un token

La solicitud cURL siempre devuelve un error 400 con el mensaje: "No se encontró el código coincidente o ya se usó"

Sin embargo, después de muchas pruebas, obtuve un access_token solo una vez, pero expiró aproximadamente una hora más tarde. Esto parece ser muy aleatorio.

La API de pantalla básica de Instagram parece bastante nueva. Hace un tiempo, he usado aplicaciones creadas en el sitio web https://www.instagram.com/developer/ y solía funcionar. Ahora este sitio muestra este mensaje:

ACTUALIZACIÓN: a partir del 15 de octubre de 2019, el registro de nuevos clientes y la revisión de permisos en la plataforma API de Instagram se suspenden a favor de la API de pantalla básica de Instagram.

... con un enlace a developers.facebook.com.

Maxime Freschard
fuente
¿Dónde puede obtener el token de acceso? Sigo recibiendo el mismo error 400 incluso usandocurl
Gianfranco P.
@GianfrancoP. ¿Has intentado publicar tu aplicación de Facebook? (en la consola de desarrolladores de Facebook para aplicaciones)
Maxime Freschard
Finalmente logré obtener el token de acceso. Mi aplicación ha estado activa antes, pero ahora estoy agregando el inicio de sesión de Instagram, así que espero la aprobación en unas pocas horas hoy. Me las arreglé para ponerlo a trabajar, no estoy seguro de qué estaba haciendo exactamente exactamente, tbh
Gianfranco P.
Comprobar mi respuesta con un código aquí stackoverflow.com/a/59305113/1474270~~V~~3rd que podría ayudar
patJnr

Respuestas:

3

Acabo de tener éxito eliminando el #_ final al final del código que te dan. ¿No está seguro si ese fue su problema?

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

Emmanuel
fuente
Hola @ Emmanuel, también noté que funcionaba al eliminar estos caracteres finales. Pero la mayoría de las veces no funciona en absoluto.
Maxime Freschard el
3

Tuve este problema cuando intentaba implementar una aplicación.
Mi problema fue el código generado cuando permites los permisos.
Intente eliminar #_ del final del código generado e intente generar el token nuevamente

Ejemplo de código generada: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A #_

El código generado editado: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A

Rômulo Milani
fuente
1

Intenté usar la herramienta de línea de comandos según los documentos originales ( https://developers.facebook.com/docs/instagram-basic-display-api/getting-started ), pero no tuve suerte ...

Esto es lo que debe hacer en 3 sencillos pasos:

  1. Lo primero: instalar Postman https://www.postman.com/downloads/
  2. Realice una solicitud POST https://api.instagram.com/oauth/access_tokencon los parámetros del cuerpo, NO con los parámetros. Asegúrese de que la x-www-form-urlencodedopción esté habilitada.
  3. Ahora debería obtener un estado 200 OKy una respuesta con ambos access_tokeny user_id.
{
    "access_token": "IGQVJYUXlDN...",
    "user_id": 17841400...
}

¡¡Días felices!!

Vea la captura de pantalla para la configuración correcta:

ingrese la descripción de la imagen aquí

Anas
fuente
0

También estaba teniendo el mismo problema, resolví borrar el caché, el coockie y otros datos del navegador.

Entonces hice una nueva solicitud.

Pruébalo, funcionó conmigo.

Ueslen Santos
fuente
0

Encontré la solución.

El uri directo debe ser el mismo que usas al principio.

ex. Tu usas

www.abc.com/auth 

para obtener el código Cuando intercambias el token, el redirect_uri debe ser el mismo que

www.abc.com/auth
JackWu
fuente
0

Estaba usando la antigua API de Instagram también. Tuve que cambiar algunas cosas para que mi código funcionara en la nueva API. No estoy seguro de lo que estás usando, así es como lo hice 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);
Nadie
fuente
Hola @ Nadie, también estoy usando PHP con Guzzle (biblioteca cURL). Mi código es similar al tuyo. Funcionó una vez ayer, pero la mayoría de las veces no funciona ...
Maxime Freschard
Hola @ Nadie, ¿cómo se llama al punto final api.instagram.com/oauth/authorize para obtener un código con cURL? Cuando hago eso, soy redirigido a la página de inicio de sesión de Instagram.
Maxime Freschard el
Maxime, no tienes que usar cURL. Instagram incluye el código en la URL después de que redirige a su sitio. Puede usar HTTP GET para recoger el código: $ code = $ _GET ['code'];
Nadie el
-1

Estoy usando PHP pero sin usar ninguna lib. Quizás este te ayude.

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']es obligatorio y debe saber cómo obtener el código. Leer aquí

Navbro
fuente