如何使用 SDK 4.4.0 和 API 2.3 从 facebook 用户配置文件中检索电子邮件?

How to retrieve email from facebook user profile with SDK 4.4.0 and API 2.3?

我有一个关于使用 Facebook SDK 4.4.0 / API 2.3.

检索用户电子邮件的小问题

我通过开发人员 facebook 区域创建了我的应用程序,实际上我在 PHP 脚本中的目标是通过我的 facebook 应用程序登录 Facebook,以检索已登录用户的一些信息,以在我的网站中创建一个基本的轮廓。 我有两个 PHP 脚本,第一个获取 facebook 的登录 url,第二个在身份验证后检索用户数据。

login.php

require_once(dirname(__FILE__).'/libs/facebook-php-sdk-v4-4.0-dev/autoload.php');

Facebook\FacebookSession::setDefaultApplication($a_config['settings']['facebook_app_id'], $a_config['settings']['facebook_app_secret']);

$o_helper = new Facebook\FacebookRedirectLoginHelper($s_facebook_login_backurl);
$s_facebook_login_url = $o_helper->getLoginUrl();

通过这个 $s_facebook_login_url 我登录 facebook 应用程序,以用户身份验证自己,然后通过参数 [=40= 返回到我的第二个脚本]$s_facebook_login_backurl。在这里,我有从我的个人资料中获取数据的命令。我需要的一切都很好,除了电子邮件,找不到这个元素。

registration.php

require_once(dirname(__FILE__).'/libs/facebook-php-sdk-v4-4.0-dev/autoload.php');

Facebook\FacebookSession::setDefaultApplication($a_config['settings']['facebook_app_id'], $a_config['settings']['facebook_app_secret']);


$o_social = Facebook\FacebookSession::newAppSession();
try {
      $o_social->validate();
}
catch(...){
  // exceptions
}

$o_helper = new Facebook\FacebookRedirectLoginHelper($s_facebook_login_backurl);
$o_social = $o_helper->getSessionFromRedirect();

然后

$s_request = '/me?fields=id,name,email,last_name,first_name,middle_name';
$o_request = new Facebook\FacebookRequest($o_social, 'GET', $s_request);
$o_response = $o_request->execute();

$o_graph_object = $o_response->getGraphObject();
$a_media = $o_graph_object->asArray();
$s_facebook_id = $a_media['id'];
$s_facebook_name = $a_media['first_name'];
$s_facebook_inbetweenname = $a_media['middle_name'];
$s_facebook_surname = $a_media['last_name'];
$s_facebook_email = $a_media['email'];

问题是最后一个变量 $s_facebook_email 完全是空的。

在 facebook 的开发人员区域,在 Graph API Explorer 中我什至测试了我对 facebook 应用程序的 GET 请求,并且检索了电子邮件,我设置了用户的权限(在用户数据权限中) 和电子邮件(在扩展权限中),但通过 SDK,电子邮件是唯一缺少的元素。

我什至尝试从我的用户设置中删除该应用程序,然后再次进行身份验证,但没有成功。 有没有人有一些想法来获取电子邮件? 我在网上发现几乎总是相同的建议,但可能我错过了什么。

提前致谢

根据 docs,您可以指定要向用户请求的权限:

# login.php
$fb = new Facebook\Facebook([/* . . . */]);

$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'user_likes']; // optional
$loginUrl = $helper->getLoginUrl('http://{your-website}/login-callback.php', $permissions);

echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';