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

时间:2015-10-26 23:49:03

标签: php facebook email facebook-graph-api facebook-php-sdk

我在使用 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应用程序中登录,以用户身份验证自己,然后通过参数 $ 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资源管理器中,我甚至测试了我的Facebook应用程序的GET请求,并检索了电子邮件,我设置了用户的权限(在用户数据权限中)和电子邮件(在扩展权限中)但通过SDK,电子邮件是唯一缺少的元素。

enter image description here

我甚至试图从我的用户设置中删除该应用程序,并再次进行身份验证,但它无法正常工作。 有人想收到电子邮件吗? 我在网上发现几乎总是相同的建议,但我可能会错过一些东西。

提前致谢

1 个答案:

答案 0 :(得分:0)

根据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>';