无法获得 Instagram Basic Display API 的 access_token
Posted
技术标签:
【中文标题】无法获得 Instagram Basic Display API 的 access_token【英文标题】:Impossible to get an access_token for Instagram Basic Display API 【发布时间】: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
在这里用一些代码检查我的答案***.com/a/59305113/1474270它可能会有所帮助
***.com/questions/59526137/…
【参考方案1】:
我尝试按照原始文档 (https://developers.facebook.com/docs/instagram-basic-display-api/getting-started) 使用命令行工具,但没有运气...
只需 3 个简单的步骤即可完成以下操作:
-
第一件事:安装邮递员https://www.postman.com/downloads/
使用正文中的参数向
https://api.instagram.com/oauth/access_token
发出 POST 请求,不是参数。确保 x-www-form-urlencoded
选项已启用。
您现在应该获得200 OK
的状态和access_token
和user_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
【讨论】:
以上是关于无法获得 Instagram Basic Display API 的 access_token的主要内容,如果未能解决你的问题,请参考以下文章
获取授权用户的头像(Instagram Basic Display API)