我刚刚从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中获取
答案 0 :(得分:1)
$response = $facebook->get('/me?fields=email,name');
行。所以facebook上的指南并没有提到我能看到的任何地方。
但是通过添加?fields = email,将name命名为get url的末尾。
响应正文现在包含必填字段