以下是我一直在测试的代码:
<?php
$accessToken = file_get_contents('https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=client_credentials');
$accessToken = explode('=', $accessToken);
$accessToken = $accessToken[1];
?>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function()
{
FB.init({
appId: 'APP_ID',
status: true,
cookie: true,
xfbml: true
});
FB.api('/me?access_token=<?php echo $accessToken; ?>', function(user)
{
if (user != null)
{
console.log(user);
}
});
};
(function()
{
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_GB/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
我收到以下错误:
An active access token must be used to query information about the current user.
我在Facebook上注册了我的网站URL以获取我的ID / Secret,并在注册时指定的目录中运行上述脚本。
我做错了什么?
答案 0 :(得分:1)
您正在混淆这里,尝试使用App access_token
访问用户信息!
阅读Authentication document,User login
部分。此外,我 强烈 建议使用Facebook PHP-SDK,其中库将负责所有身份验证和授权交换过程。
答案 1 :(得分:0)
我认为你使用旧的rest api获取访问令牌为什么你不使用graph api获取访问令牌?
define('FACEBOOK_APP_ID', 'Your API ID'); define('FACEBOOK_SECRET', 'YOUR SECRET'); function get_facebook_cookie($app_id, $application_secret) { $args = array(); parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); ksort($args); $payload = ''; foreach ($args as $key => $value) { if ($key != 'sig') { $payload .= $key . '=' . $value; } } if (md5($payload . $application_secret) != $args['sig']) { return null; } return $args; } $cookie = get_facebook_cookie(FACEBOOK_APP_ID, FACEBOOK_SECRET); $name=json_decode(file_get_contents('https://graph.facebook.com/me?access_token='.$cookie['access_token']));
我觉得它的简洁