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.

Maxime Freschard
fonte
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

Acabei de remover o número_ no final do código que eles fornecem. Não tem certeza se esse foi o seu problema?

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

Emmanuel
fonte
Olá @Emmanuel, também notei que funcionava ao remover esses caracteres finais. Mas na maioria das vezes não funciona.
Maxime Freschard
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

Rômulo Milani
fonte
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

Anas
fonte
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.

Ueslen Santos
fonte
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
JackWu
fonte
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);
Ninguém
fonte
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

Navbro
fonte