Facebook 2.5图表api没有返回用户电子邮件

时间:2016-08-09 19:52:02

标签: php facebook email facebook-graph-api

我刚刚从Facebook上关注此指南:https://developers.facebook.com/docs/php/gettingstarted

我正在从旧版本的facebook php sdk升级。

成功升级并验证了用户的痛苦,我似乎已经碰到了一堵砖墙。

根据他们的说明,我已将$权限设置为一个数组,仅包含1个字符串,即电子邮件。但是,电子邮件不会被退回。我现在只获取facebook id和用户名。

如何从新的facebook php sdk v2.5中获取用户的电子邮件?

这是重定向之前的代码,工作正常:

$facebook = new \Facebook\Facebook($config);
$helper = $facebook->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl($_WEBROOT .'/authenticate_facebook.php', ['email']);

这是处理响应的代码,除了我看不到如何获取电子邮件之外,它的工作原理如下:

$facebook = new  \Facebook\Facebook($config);
$helper = $facebook->getRedirectLoginHelper();

$accessToken = false;

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;
}

//if we don't have an access token redirect the user to the login page
if ( !$accessToken ) {
    \Controller::redirectTo('/login?facebook-login-error');
}

// Sets the default fallback access token so we don't have to pass it to each request
$facebook->setDefaultAccessToken( $accessToken );

try {
    $response = $facebook->get('/me');
} catch(\Facebook\Exceptions\FacebookResponseException $e) {
    // When Graph returns an error
    \Controller::redirectTo('/login?facebook-login-error');
} catch(\Facebook\Exceptions\FacebookSDKException $e) {
    // When validation fails or other local issues
    \Controller::redirectTo('/login?facebook-login-error');
}

print_r( $response->getDecodedBody() );
die();

最后一个print_r的结果只是:

Array ( [name] => Bob Smith [id] => 5995599559 )

当前的应用程序需要电子邮件地址:/并且它曾用于在v2.0中获取

1 个答案:

答案 0 :(得分:1)

        $response = $facebook->get('/me?fields=email,name');

行。所以facebook上的指南并没有提到我能看到的任何地方。

但是通过添加?fields = email,将name命名为get url的末尾。

响应正文现在包含必填字段