Facebook - 获取个人资料图片 PHP SDK

3

直到几个月前,我一直使用这种方法来获取用户的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后,我在使用这种方法时遇到了一些问题。如果我在我的应用程序主菜单上闲置5分钟,然后点击转到调用此方法的页面,我会收到“OAuthException:必须使用活动访问令牌来查询有关当前用户的信息”错误消息。有什么想法吗?
1个回答

10

我想这与新/旧SDK无关。用户已注销,访问令牌已过期或您对会话中的用户处理存在缺陷。

每当您尝试使用/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

就这样了!


现在我不再收到错误信息了,但是5分钟后页面上不再显示图片了。 - Speedwheelftw
你在说哪张图片? - Sahil Mittal
2
解决方案是将 $user_id = $this->facebook_obj->getUser(); 放置在 "/me/picture" 的位置上,然后将其替换为 "/".$user_id."/picture",但我会给你功劳。感谢你的帮助! - Speedwheelftw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接