直到几个月前,我一直在使用这种方法来获取用户的 Facebook 个人资料图片并且工作正常。
public function getUserProfilePic(){
$access_token = $this->facebook_obj->getAccessToken();
$user_id = $this->facebook_obj->getUser();
$response = $this->facebook_obj->api(
"/me/picture",
"GET",
array (
'redirect' => false,
'type' => 'large'
)
);
return (!empty($response['data']['url'])) ? $response['data']['url'] : 'images/default_profile.jpg';
}
但是自从使用新的 PHP SDK 以来,我在使用这种方法时遇到了一些问题。如果我在我的应用程序的主菜单上 afk 5 分钟,然后继续单击以转到它调用此方法的页面,我得到 p>
"OAuthException : An active access token must be used to query information about the current user" error.
有什么想法吗?
最佳答案
我猜与新/旧 SDK 无关。用户已注销,或者访问 token 已过期,或者您对 session 中用户的处理存在缺陷。
每当您尝试使用 /me
进行调用但没有用户登录到应用程序时,就会发生此错误。
因此,在进行调用之前,您应该始终验证当前用户然后继续,类似这样-
$user_id = $this->facebook_obj->getUser();
if ($user_id) {
try {
$response = $this->facebook_obj->api(
"/me/picture",
"GET",
array (
'redirect' => false,
'type' => 'large'
)
);
} catch (FacebookApiException $e) {
error_log($e);
}
}else {
// redirect to Facebook login to get a fresh user access_token
$loginUrl = $this->facebook_obj->getLoginUrl();
header('Location: ' . $loginUrl);
}
编辑:
您不需要执行 redirect: false
并从 json 中获取 url
。可以直接使用url作为图片来源:
https://graph.facebook.com/{user-id}/picture?type=large
就是这样!
关于php - Facebook - 获取个人资料图片php sdk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23036412/