Facebook - 获取个人资料图片php sdk

时间:2014-04-12 21:36:37

标签: php facebook facebook-graph-api facebook-php-sdk

直到几个月前,我才使用这种方法获取用户的脸谱资料图片并且工作正常。

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 个答案:

答案 0 :(得分: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。您可以直接使用网址作为图片来源:

https://graph.facebook.com/{user-id}/picture?type=large

就是这样!