Facebook图形API返回空值

时间:2015-08-28 17:22:17

标签: php facebook facebook-graph-api

我的Facebook登录功能在我的本地主机上完美运行,但当我将其上传到网络服务器时,无法从用户那里获取任何数据。 我只能获取他们的脸书ID ,但其他信息为空或空白。

我认为facebook登录有效,因为它们被重定向到我初始化的$redirect_url

$app_id = "******";
$app_secret = "*******";
$redirect_url = "localhost/sample/";

try
{
    $facebook = FacebookSession::setDefaultApplication($app_id,$app_secret);
    $helper = new FacebookRedirectLoginHelper($redirect_url);
    $sess = $helper -> getSessionFromRedirect();
}
catch(Exception $e)
{

}


if(!isset($sess))
{    
    //facebook login button

    echo '<div class="fb"><a href="'.$helper->getLoginUrl().'"> <i class="fa fa-facebook"></i>Sign in with Facebook</a></div>';

}
else
{
    $request = new FacebookRequest($sess,'GET','/me');
    $response = $request->execute();                                                
    $graph = $response->getGraphObject(GraphUser::classname());                 
    $fb_id = $graph ->getId(); //this is the only data that i can get
    $fname = $graph ->getFirstName();
    $lname = $graph ->getLastName();
    $gender = $graph ->getGender();

    echo 'name: '.$fname.' '.$lname.' gender: '.$gender; // these are null or ''      

    $_SESSION['fb_session'] = $sess;
}

我已获得我的许可。

这是我创建的fb帐户。 enter image description here

如上所示,我认为我没有违反任何规则,因为我只是从约定的许可中获取信息。

1 个答案:

答案 0 :(得分:-1)

看起来FB要求您在请求中包含Graph版本。此外,为什么不在例外中添加一些检查,以查看它是图形问题还是FB SDK。此外,用户是否正在进行身份验证,而您只是没有获取数据,或者他们是否未进行身份验证?

以下是我使用过的剪辑,它位于FB Graph auth文档中:

$fb = new Facebook\Facebook([
 'app_id' => '{app-id}',
 'app_secret' => '{app-secret}',
 'default_graph_version' => 'v2.2',
]);

$helper = $fb->getRedirectLoginHelper();

try {
  $accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
  // When Graph returns an error
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
 // When validation fails or other local issues
 echo 'Facebook SDK returned an error: ' . $e->getMessage();
 exit;
}

这也可以让你从你注册的应用程序中获取它的redirect_url。