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


9

我正在尝试从Instagram获取access_token,以将其Basic Display 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的链接。


您在哪里可以获得访问令牌?即使使用curl
Gianfranco P,

@GianfrancoP。您是否尝试发布您的Facebook应用程序?(在Apps的Facebook开发人员控制台中)
Maxime Freschard

我终于设法获得了访问令牌。我的应用程序以前一直处于运行状态,但现在我要添加Instagram登录信息,因此今天等待几个小时的批准。我设法使其正常工作,不确定到底是我做错了什么,tbh
Gianfranco P.19年

在这里检查我的答案与一些代码stackoverflow.com/a/59305113/1474270它可能会有所帮助
patJnr

Answers:



3

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

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

生成的代码编辑: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A


1

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

以下是3个简单步骤的操作:

  1. 第一件事:安装Postman 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...
}

快乐的时光!!

请参阅屏幕截图以获取正确的设置:

在此处输入图片说明



0

我找到了解决方案。

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

例如 你用

www.abc.com/auth 

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

www.abc.com/auth

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

嗨,@没人,我也在Guzzle(cURL库)中使用PHP。我的代码与您的代码相似。昨天它曾经工作过一次,但大多数时候都行不通了……
Maxime Freschard

嗨,@没人,您如何调用api.instagram.com/oauth/authorize端点以使用cURL获取代码?当我这样做时,我将被重定向到Instagram登录页面。
马克西姆·弗雷沙德

Maxime,您不必使用cURL。Instagram重定向到您的网站后,会将代码包含在URL中。您可以使用HTTP GET拾取代码:$ code = $ _GET ['code'];
没人

-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']是必填项,您应该知道如何获取代码。在这里阅读

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.