我正在使用facebook SDK用PHP编写Facebook应用程序。
我的代码中的重要部分是:
$facebook = new Facebook(array(
'appId' => $ApplicationID,
'secret' => $ApplicationSecret,
'cookie' => true, // enable optional cookie support
));
$user = $facebook->getUser();
$post = $facebook->api('/' . $user . '/feed', 'post', array(
stuff
));
$_SESSION['finish'] = false;
$_SESSION['inside'] = 'yes';
$_SESSION['uid'] = $user;
$token = $facebook->getAccessToken();
echo 'Access token: ' .$token;
$_SESSION['friends'] = $facebook->api('/me/friends?access_token'.$token);
您可以看到我正在echo
访问令牌。
起初,我没有将access_token
添加到查询中 - 我只是添加了它以进行检查。
问题是最后一个喜欢(带有/me/friends/
)抛出异常:
OAuthException: An active access token must be used to query information about the current user.
虽然我做了登录,feed post
确实有效(我检查了我的墙,它就在那里)。然后,我的try catch
块通过重定向到登录链接来处理异常,方式如下:
catch(Exception $e) {
$login_url_params = array(
'scope' => 'stuff',
'fbconnect' => 1,
'redirect_uri' => $ApplicationURL
);
$login_url = $facebook->getLoginUrl($login_url_params);
//redirect to the login URL on facebook
echo ("EXCPETION! " . $e . "<script> top.location.href='" . $login_url . "'</script>");
exit();
}
编写异常的代码显然仅用于调试目的。
好吧,当我第一次运行应用程序时,类似的代码由if(!$user)
条件执行。然后它请求我的许可,我给了它。然后,它再次说访问令牌无效(但确实发布到我的墙上)。
请注意,我已经比较了access_tokens,即使在删除应用程序并再次执行所有操作之后 - 它保持不变。
这是非常尴尬的行为,我无法理解。有人可以对此有所了解吗?
编辑:出于某种奇怪的原因,即使转到其他用户,令牌也不会更改。但是墙上的柱子还是做了...(以及访问好友列表时抛出的异常)
出于某种奇怪的原因,即使转到其他用户后,令牌也不会更改。但是墙上的柱子还是做了...(以及访问好友列表时抛出的异常)
在我看来,这听起来好像您当前实际上没有登录用户,因此 SDK 只是使用您的应用程序访问令牌,这始终是它在接收另一个更"特定"的令牌之前将使用的默认令牌。
您的访问令牌具有什么格式 - 看起来像your_app_id|your_app_secret
还是your_app_id|some_random_characters
?如果它以应用 ID 开头,则它最明确地是应用访问令牌。