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.


¿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

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


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í


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.


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

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);

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í

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.