Facebook graph api 格式错误的Facebook访问令牌
我正在尝试使用Facebook Graph API从Facebook抓取相册,并将它们放在我正在开发的网站上。我在Codeigniter框架中使用PHP作为我的语言,并重定向到Facebook URL以获取用户的访问令牌。Facebook向我返回一个访问令牌,我抓取它并将其插入我的数据库 这就是说,当我试图通过访问图形URL获取相册的JSON数据时,它返回一个错误。图形URL和错误为:Facebook graph api 格式错误的Facebook访问令牌,facebook-graph-api,Facebook Graph Api,我正在尝试使用Facebook Graph API从Facebook抓取相册,并将它们放在我正在开发的网站上。我在Codeigniter框架中使用PHP作为我的语言,并重定向到Facebook URL以获取用户的访问令牌。Facebook向我返回一个访问令牌,我抓取它并将其插入我的数据库 这就是说,当我试图通过访问图形URL获取相册的JSON数据时,它返回一个错误。图形URL和错误为: https://graph.facebook.com/1298926000574/photos?access_
https://graph.facebook.com/1298926000574/photos?access_token=[MY ACCESS TOKEN]
My access token: AQBxqdB64GHNTGY5Yp_IOuMY7NerwNtXVVrp2HwT1qXj02zqU-63KJDyB2jzqurlJ4M0vd7TAu7upA6T7ZYQzIChr2PgD1dpu-6Iebi0WVILbBSBOu-yj7sgcHSGS-Ew4Yio0I9In-1O5jOxbYLDMbI0Zmwk-F1-u-7a8iVvTJram8PvpmdRt5eg
Returned error:
{
"error": {
"message": "Malformed access token [MY ACCESS TOKEN]",
"type": "OAuthException",
"code": 190
}
}
我真的不确定Facebook为什么一直把这个错误返回给我。访问令牌相当长,我将其作为“文本”字段存储在数据库中。我听从了他们的指示,现在他们正朝我的脚开枪。任何帮助都将不胜感激。我遇到了同样的问题,我发现这篇文章正在寻找解决方案。我注意到“我们的”访问令牌有很多奇怪的符号,而其他符号只是一个字母数字字符串 我相信你(和我)犯的错误是把代码和访问令牌混在一起了 在将facebook用户发送到您的api以确认访问后,他们将返回到您的网站,并带有
$\u get['code']
。此代码需要通过Facebook验证,Facebook将在成功后返回access_令牌
$app_id = [YOUR_APP_ID];
$app_secret = [YOUR_APP_SECRET];
$my_url = [THE_SAME_AS_THE_POST_BEFORE];
$code = $_GET['code'];
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;
$response = file_get_contents($token_url);
$params = null;
json_decode($response, $params);
$access_token = $params['access_token'];
我也有同样的问题。我知道它是如何工作的,这是为所有沉入同一泥潭的人准备的
require 'facebook-php-sdk/facebook.php';
$facebook = new Facebook(array(
'appId' => 'APP ID',
'secret' => 'SECRET KEY',
));
// Get User ID
$user = $facebook->getUser();
if ($user) {
$accessToken = $facebook->getAccessToken();
try {
$url = "https://graph.facebook.com/1298926000574/photos?access_token=".$accessToken;
$photos = $facebook->api($url);
var_dump($photos);
} catch (FacebookApiException $e) {
$user = null;
}
}
} else {
//echo "You need to login";
header("Location:".$facebook->getLoginUrl());
}
一个wp插件返回相同的错误,这就是解决方案,可能与您的问题有关: Php请求访问令牌,facebook服务器返回它 包含access_令牌的返回消息以前类似:
access_token=.......
但对于新创建的应用程序(2012年),facebook服务器返回:
access_token=.....&expires=.....
如果您的代码解析错误,如
$access_token=str_replace('access_token=','',$message);
然后,您的$access\u令牌错误地包含额外的&expires等
应将其解析为:
parse_str($message,$ar); $access_token=$ar['access_token'];
正如error所说,它的格式不正确,异常意味着格式化
请求时出错
https://graph.facebook.com/me/photos/?access_token=[your_accesstoken]
那就好像
https://graph.facebook.com/me/photos/?access_token=AQBxqdB64GHNTGY5Yp_IOuMY7NerwNtXVVrp2HwT1qXj02zqU-63KJDyB2jzqurlJ4M0vd7TAu7upA6T7ZYQzIChr2PgD1dpu-6Iebi0WVILbBSBOu-yj7sgcHSGS-Ew4Yio0I9In-1O5jOxbYLDMbI0Zmwk-F1-u-7a8iVvTJram8PvpmdRt5eg
您正在发送请求中的code
而不是access\u令牌
Laravel社交名流的解决方案用户:
使用:
而不是:
$user = Socialite::driver($provider)->user();
tl;博士
访问令牌应由您的应用程序id和访问令牌组成,它们之间有一个管道(
)字符:123456789012345 | AbCDefGHijKLMNOpqRSTUVwxYZ
创建和使用访问令牌
注意:在本教程中,我只使用虚拟凭证。它们的样式将与实际的样式相同,但它们的确切值只是一系列递增的数字或字符永远不要在线发布您的实际凭证强>
创建访问令牌
要求:
- 应用程序id:
123456789012345
- 应用程序机密:
zyxwvutsrqponmljihgfedcba
如果您遵循以下步骤,您将找到此URL,您可以在其中创建一个URL:
GET /oauth/access_token?client_id={app-id}&client_secret={app-secret}&grant_type=client_credentials
如果我们在虚拟凭据中插入GET请求的URI,则应该如下所示:
http://graph.facebook.com/oauth/access_token?client_id=123456789012345&client_secret=ZYxwVUTSRqpONMLKjiHGfeDCbA&grant_type=client_credentials
http://graph.facebook.com/1234567890/notifications?access_token=123456789012345|AbCDefGHijKLMNOpqRSTUVwxYZ&template=Test&ref=notif_test
答复将是:
{
"access_token": "123456789012345|AbCDefGHijKLMNOpqRSTUVwxYZ",
"token_type": "bearer"
}
访问令牌由应用id和管道(|
)以及可称为实际访问令牌的字符串组成
使用访问令牌
要求:
- 访问令牌:
123456789012345 | AbCDefGHijKLMNOpqRSTUVwxYZ
- 你还需要什么证件。本例中的用户id:
1234567890
在本例中,我将遵循以下步骤。他们展示了这个模板:
POST /{recipient_userid}/notifications?access_token=... &template=...&href=...
这意味着,在您填写凭证后,POST请求示例应如下所示:
http://graph.facebook.com/oauth/access_token?client_id=123456789012345&client_secret=ZYxwVUTSRqpONMLKjiHGfeDCbA&grant_type=client_credentials
http://graph.facebook.com/1234567890/notifications?access_token=123456789012345|AbCDefGHijKLMNOpqRSTUVwxYZ&template=Test&ref=notif_test
方括号中的单词是您放在那里的吗?是的,它只是用来显示访问令牌在URL中的位置和错误JSON。您是否试图绕过存储在数据库中,而直接从Facebook返回的数据中使用它?我的观点是确保令牌的存储和查询不受责备。访问令牌肯定有问题-我的令牌中似乎没有下划线或破折号。。。它是以某种方式编码的吗?不要公开发布真正的访问令牌!请确保您更改了所有访问令牌中的某些字符,并在完成此问题后立即注销并再次登录,以使其无效!两个URL的区别是什么?+1是最好的解释!但是,parse_str
不起作用。我想这是因为API可能有了轻微的改变。相反,json\u decode
完成这项工作。