【问题标题】:Impossible to get an access_token for Instagram Basic Display API无法获得 Instagram Basic Display API 的 access_token
【发布时间】:2019-10-21 15:39:19
【问题描述】:

我正在尝试从 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 基本显示 API。

...带有到 developers.facebook.com 的链接。

【问题讨论】:

  • 在哪里可以获得访问令牌?即使使用curl,我也会不断收到相同的 400 错误
  • @GianfrancoP。您是否尝试过发布您的 Facebook 应用程序? (在应用程序的 Facebook 开发者控制台中)
  • 我终于设法获得了访问令牌。我的应用程序之前已经上线,但现在我正在添加 Instagram 登录,所以我正在等待今天几个小时的批准。我设法让它工作,不确定我到底做错了什么,tbh
  • 在这里用一些代码检查我的答案stackoverflow.com/a/59305113/1474270它可能会有所帮助

标签: instagram instagram-api


【解决方案1】:

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

只需 3 个简单的步骤即可完成以下操作:

  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...
}

快乐的日子!!

查看正确设置的截图:

【讨论】:

  • 谢谢,这对我有帮助,他们应该把它添加到主文档中,因为它们不好
  • 谢谢,这很有用。我将请求参数更改为数据并且它起作用了。
【解决方案2】:

我刚刚成功删除了他们提供给您的代码末尾的 #_。不确定这是否是您的问题?

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

【讨论】:

  • 嗨@Emmanuel,我还注意到它在删除这些尾随字符时有效。但大多数时候它根本不起作用。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

    然后我提出了一个新的请求。

    试试吧,它对我有用。

    【讨论】:

      【解决方案5】:

      我找到了解决方案。

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

      例如。你用

      www.abc.com/auth 
      

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

      相同
      www.abc.com/auth
      

      【讨论】:

        【解决方案6】:

        我也在使用旧的 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);
        

        【讨论】:

        • 嗨@Nobody,我也在使用 PHP 和 Guzzle(cURL 库)。我的代码和你的类似。它昨天工作了一次,但大多数时候它不起作用......
        • 嗨@Nobody,您如何调用api.instagram.com/oauth/authorize 端点来获取带有cURL 的代码?当我这样做时,我被重定向到 Instagram 登录页面。
        • Maxime,您不必使用 cURL。 Instagram 在重定向到您的网站后将代码包含在 URL 中。您可以使用 HTTP GET 来获取代码:$code = $_GET['code'];
        【解决方案7】:

        我正在使用 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

        【讨论】:

          猜你喜欢
          • 2020-02-18
          • 2020-07-10
          • 1970-01-01
          • 1970-01-01
          • 2016-10-03
          • 1970-01-01
          • 2012-01-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多