通过Facebook API获取用户的生日

时间:2012-07-18 07:31:28

标签: php javascript facebook

我在Facebook API上遇到了一些麻烦,我正在通过Javascript请求获得用户的一些信息的许可:

FB.login(function (response) {
    if (response.authResponse) {
        // authorized
    } else {
        // canceled
    }
}, {scope: 'email,user_birthday,user_location'});

现在我想通过PHP获取用户的信息(当他被授权时):

$facebookUser = json_decode(file_get_contents('https://graph.facebook.com/' . $this->data['userid'] . '?access_token=' . $this->oathtoken . '&fields=id,name,location,gender,email,picture,birthday,link'));

所有工作都很好,除了API没有给用户的生日回来。即使我在公共场所设置我的生日隐私设置,也不会显示。

所以:

echo $facebookUser['birthday']; // Gives an error, since this key does not exists

有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

您在客户端登录但在服务器端执行php,因此您只收到用户对象的基本信息。

如果您在服务器端登录并拥有permissions,那么只需使用以下内容即可获得生日:

echo $facebookUser['birthday'];

答案 1 :(得分:1)

很可能您没有获得从FB请求user_birthday的批准。

除非FB审核您的FB应用,否则您无法获得public_profile

只有未经审核才能请求以下权限:user_friendsemailage_range (见:https://developers.facebook.com/docs/facebook-login/review/what-is-login-review

如果不进行审核,您只能请求user_birthday,而不能{{1}}

答案 2 :(得分:0)

FB.login(function (response) {
    var user_birthday = response.user_birthday; 
    console.log(user_birthday);
if (response.authResponse) {

} else {
    // canceled
}
}, {scope: 'email,user_birthday,user_location'});

如果您想在服务器端获取FB信息,为什么不使用服务器端身份验证?

如果你对客户端认证没问题,上面应该可以正常工作。