Impossível obter um access_token para a API de exibição básica do Instagram


9

Estou tentando obter um access_token do Instagram para usar sua API de exibição básica para um novo aplicativo (basta exibir tweets em uma página da web).

Segui estas etapas: https://developers.facebook.com/docs/instagram-basic-display-api/getting-started

Mas estou preso na Etapa 5: troque o código por um token

A solicitação cURL sempre retorna um erro 400 com a mensagem: "O código correspondente não foi encontrado ou já foi usado"

No entanto, após muitos testes, recebi um access_token apenas uma vez, mas expirou cerca de uma hora depois. Isso parece ser muito aleatório.

A API de exibição básica do Instagram parece bastante nova. Há algum tempo, usei aplicativos criados no site https://www.instagram.com/developer/ e ele funcionava. Agora, este site exibe esta mensagem:

ATUALIZAÇÃO: a partir de 15 de outubro de 2019, o registro de novos clientes e a revisão de permissões na plataforma da API do Instagram serão descontinuados em favor da API de exibição básica do Instagram.

... com um link para developers.facebook.com.


onde você pode obter o token de acesso? Eu continuo recebendo o mesmo erro de 400 mesmo usando #curl
Gianfranco P.

@GianfrancoP. você tentou publicar seu aplicativo do Facebook? (no console do Facebook Developers for Apps)
Maxime Freschard

Finalmente consegui obter o token de acesso. Meu aplicativo já estava ativo antes, mas agora estou adicionando o login do Instagram, então aguardo a aprovação hoje. Eu consegui-lo para o trabalho, não tenho certeza o que eu estava fazendo de errado exatamente, tbh
Gianfranco P.

Verifique a minha resposta com algum código aqui stackoverflow.com/a/59305113/1474270 que poderia ajudar
patJnr

Respostas:



3

Eu tive esse problema quando estava tentando implementar um aplicativo.
Meu problema foi o código gerado quando você permite as permissões.
Tente remover #_ do final do código gerado e tente gerar o token novamente

Exemplo de código gerado: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A #_

Código gerado editado: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A


1

Tentei usar a ferramenta de linha de comando conforme os documentos originais ( https://developers.facebook.com/docs/instagram-basic-display-api/getting-started ), mas sem sorte ...

Aqui está o que fazer em três etapas fáceis:

  1. Primeira coisa: instale o Postman https://www.postman.com/downloads/
  2. Faça uma solicitação POST https://api.instagram.com/oauth/access_tokencom os parâmetros no corpo, NÃO os parâmetros. Verifique se a x-www-form-urlencodedopção está ativada.
  3. Agora você deve obter um status 200 OKe uma resposta com ambos access_tokene user_id.
{
    "access_token": "IGQVJYUXlDN...",
    "user_id": 17841400...
}

Dias felizes!!

Veja a captura de tela para as configurações corretas:

insira a descrição da imagem aqui


0

Eu também estava tendo o mesmo problema, resolvi limpar o cache, coockie e outros dados do navegador.

Então eu fiz um novo pedido.

Experimente, funcionou comigo.


0

Eu encontrei a solução.

O uri direto deve ser o mesmo que você usa no começo.

ex. Você usa

www.abc.com/auth 

para obter o código. Quando você troca o token, o redirect_uri deve ser o mesmo que

www.abc.com/auth

0

Eu também estava usando a antiga API do Instagram. Eu tive que mudar algumas coisas para fazer meu código funcionar na nova API. Não tenho certeza do que você está usando, foi assim que fiz com o 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);

Oi @Nody, eu também estou usando PHP com o Guzzle (biblioteca cURL). Meu código é semelhante ao seu. Funcionou uma vez ontem, mas na maioria das vezes não funciona ...
Maxime Freschard 23/10/19

Oi @Nody, como você chama o endpoint api.instagram.com/oauth/authorize para obter um código com cURL? Quando faço isso, sou redirecionado para a página de login do Instagram.
Maxime Freschard

Maxime, você não precisa usar cURL. O Instagram inclui o código no URL após o redirecionamento para o seu site. Você pode usar o HTTP GET para pegar o código: $ code = $ _GET ['code'];
Ninguém

-1

Estou usando PHP, mas sem usar nenhuma lib. Talvez este ajude você.

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']é necessário e você deve saber como obter o código. Leia aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.