我正在尝试从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的链接。
答案 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)使用命令行工具,但是没有运气...
这是三个简单的步骤:
https://api.instagram.com/oauth/access_token
发出POST请求。确保启用x-www-form-urlencoded
选项。200 OK
的状态以及同时包含access_token
和user_id
的响应。{
"access_token": "IGQVJYUXlDN...",
"user_id": 17841400...
}
快乐的日子!
有关正确设置,请参见屏幕截图:
答案 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