无法获取Instagram Basic Display API的访问令牌

无法获取Instagram Basic Display API的访问令牌,instagram,instagram-api,Instagram,Instagram Api,我正试图从Instagram获得一个access_令牌,以便在新应用程序中使用其基本的显示API(只需在网页上显示推文) 我遵循以下步骤: 但我被困在第五步:用代码换代币 cURL请求总是返回一个400错误,并显示消息:“未找到匹配代码或已使用匹配代码” 然而,经过多次测试,我只获得了一次访问令牌,但它在大约一小时后过期。这似乎是非常随机的 Instagram基本显示API似乎相当新。不久前,我使用了在网站上创建的应用程序,它过去也能正常工作。现在,此站点显示以下消息: 更新:从2019年10月

我正试图从Instagram获得一个access_令牌,以便在新应用程序中使用其基本的显示API(只需在网页上显示推文)

我遵循以下步骤:

但我被困在第五步:用代码换代币

cURL请求总是返回一个400错误,并显示消息:“未找到匹配代码或已使用匹配代码”

然而,经过多次测试,我只获得了一次访问令牌,但它在大约一小时后过期。这似乎是非常随机的

Instagram基本显示API似乎相当新。不久前,我使用了在网站上创建的应用程序,它过去也能正常工作。现在,此站点显示以下消息:

更新:从2019年10月15日开始,Instagram API平台上的新客户注册和权限审查将停止,以支持Instagram Basic Display API


。。。通过链接到developers.facebook.com.

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

我只是成功地删除了他们给你的代码末尾的尾随#u。不确定这是否是你的问题


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

生成的代码示例: AQBVRQBJJTM49U1QTQWRMD96ORYMR3B_04JSfjc-nUIi0iGbSc3x_eceggqi9IYG3RJ3OCRTHQOPJBPPEXJMY4O01FXCRTT_i9; i9NovanaqmWSNEFT3MYV7IfUEUEMLC050N5NJQP6OAVDBFCFQVTDRFAR95-5I71YSFQLMJYWDG6FCWRVOB9NQR6J9M9M9MBGMGMI2B9N4KLSFELA8A<358A>

已编辑生成的代码:
AQBVRQBJJTM49U1QTQWRMD96ORYMR3B_04JSfjc-nUIi0iGbSc3x_eceggqi9IYG3RJ3O3FxCRTT\u I9NovaNAqmWSneFt3MYv\u K7IFAUEUEMLC050N5NJQP6OAVDBFCFQVTDRFAR95-5I71YSFQLMJYWDG6FCVOB9NQR6J9MBGMGMI9YKL0YKL2BAX8A使用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;

  }
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'];
index.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;

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

注意:
$\u GET['code']
是必需的,您应该知道如何获取代码

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

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

试试看,它对我有用。

我找到了解决办法

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

你用

www.abc.com/auth 
获取代码。交换令牌时,重定向uri必须与

www.abc.com/auth

我尝试按照原始文档()使用命令行工具,但没有成功

以下是通过3个简单步骤完成的操作:

  • 第一件事:安装邮递员
  • https://api.instagram.com/oauth/access_token
    正文中有参数,参数。确保启用了
    x-www-form-urlencoded
    选项
  • 您现在应该获得
    200 OK
    的状态,以及
    access\u token
    user\u id
    的响应
  • 快乐的日子

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


    Hi@Nobody,我也在Guzzle(旋度库)中使用PHP。我的代码和你的相似。昨天它工作了一次,但大部分时间都不工作……嗨@Nobody,你如何调用端点来获得带有cURL的代码?当我这样做时,我会被重定向到Instagram登录页面。Maxime,你不必使用cURL。Instagram在重定向到您的站点后将代码包含在URL中。您可以使用httpget获取代码:$code=$\u GET['code'];嗨@Emmanuel,我还注意到它在删除这些尾随字符时起作用。但大多数情况下,它根本不起作用。您在哪里可以获得访问令牌?即使使用
    curl
    @GianfrancoP,我仍然会收到相同的400错误。您是否尝试发布您的Facebook应用程序?(在Facebook开发者控制台的应用程序中)我终于获得了访问令牌。我的应用程序之前已经上线,但现在我正在添加Instagram登录,所以今天我要等待几个小时的批准。我设法让它工作,不确定我到底做错了什么,TBH在这里用一些代码检查我的答案可能会有帮助谢谢,这对我有帮助,他们应该把它添加到主文档中,因为它们不好