无法获得Instagram基本显示API的access_token

时间:2019-10-21 15:39:19

标签: instagram instagram-api

我正在尝试从Instagram获取access_token,以将其基本显示API用于新应用程序(只需在网页上显示推文)。

我遵循了以下步骤:https://developers.facebook.com/docs/instagram-basic-display-api/getting-started

但是我陷入了第5步:将代码交换为令牌

cURL请求始终返回400错误,并显示以下消息:“找不到匹配代码或已经使用了匹配代码”

但是,经过多次测试,我只获得了一次access_token,但是它在大约一个小时后过期了。这似乎是随机的。

Instagram基本显示API似乎很新。不久前,我使用了在https://www.instagram.com/developer/网站上创建的应用程序,并且该程序可以正常工作。现在,该网站显示以下消息:

  

更新:从2019年10月15日开始,Instagram API平台上的新客户端注册和权限审查将停止,转而使用Instagram Basic Display API。

...以及指向developers.facebook.com的链接。

7 个答案:

答案 0 :(得分:2)

我刚刚通过删除结尾的#_来成功完成了它们给您的代码。不确定这是否是您的问题?

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

答案 1 :(得分:2)

当我尝试实现应用程序时遇到了这个问题。
我的问题是当您允许权限时生成的代码。
尝试从生成的代码末尾删除 #_ ,然后尝试再次生成令牌

生成的代码示例: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A的 #_

已修改生成的代码: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A

答案 2 :(得分:2)

我尝试按照原始文档(https://developers.facebook.com/docs/instagram-basic-display-api/getting-started)使用命令行工具,但是没有运气...

这是三个简单的步骤:

  1. 第一件事:安装邮递员https://www.postman.com/downloads/
  2. 使用正文中的参数https://api.instagram.com/oauth/access_token发出POST请求。确保启用x-www-form-urlencoded选项。
  3. 您现在应该获得200 OK的状态以及同时包含access_tokenuser_id的响应。
{
    "access_token": "IGQVJYUXlDN...",
    "user_id": 17841400...
}

快乐的日子!

有关正确设置,请参见屏幕截图:

enter image description here

答案 3 :(得分:0)

我也使用了旧的Instagram API。我必须更改一些内容才能使我的代码在新的API上运行。不确定您使用的是什么,这就是我使用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);

答案 4 :(得分:0)

我也遇到了同样的问题,我解决了清除缓存,coockie和其他浏览器数据的问题。

然后我提出了一个新要求。

尝试一下,它对我有用。

答案 5 :(得分:0)

我找到了解决方案。

直接uri必须与开头使用的相同。

例如您使用

www.abc.com/auth 

获取代码。交换令牌时,redirect_uri必须与

相同
www.abc.com/auth

答案 6 :(得分:-1)

我正在使用PHP,但未使用任何库。也许这可以帮助您。

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

注意:$_GET['code']是必需的,您应该知道如何获取代码。 Read here