如何使用图形API获取Facebook用户的电子邮件地址?

4
我已经反复阅读了帖子, 但是对我来说没有意义。
我的目标是获取Facebook用户的电子邮件地址,以便将其存储在字符串中并进行比较,以查看它是否与我MySQL数据库中现有用户的电子邮件匹配。仅需要在用户首次授予应用程序访问权限时执行此操作。
在我的应用程序开发人员界面的“身份验证推荐”部分中,我已将“用户和好友权限”设置为包括“电子邮件”。
在我的网站的“画布”区域内,我有以下代码:
include('facebook/base_facebook.php');
include('facebook/facebook.php');
$facebook = new Facebook(array(
    'appId'  => "XXXXXXXXXXXXXXX",
    'secret' => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
));
$user = $facebook->getUser();
if ($user)
{
    try {
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        $user = null;
    }
}

如果我 var_dup() $user,我可以看到用户ID(但不是太多其他信息),这似乎是正确的,所以我相信我正在连接到Facebook上的正确位置。
但是,这里有 这个建议的代码行,它意味着返回一个电子邮件地址,但当我输出它以查看其外观时,它并没有返回一个电子邮件地址:
echo "<br/>" . $facebook->getLoginUrl(array('req_perms' => 'email'));

我本以为不行,因为它看起来不太对,但另一方面,我完全不知道该怎么做或者把它放在哪里。
然后我还发现这篇文章中的代码与HTML混合在一起,让我更加困惑。
假设我的用户已经授权我的应用程序查看他们的电子邮件,那么有没有简单的方法可以获取它?有没有什么像我这样的经验不足的程序员可以理解的东西?

2
你是如何实现Facebook登录的?使用官方的PHP SDK和JavaScript SDK吗?对了,现在应该使用scope而不是req_perms。 - arma
3个回答

4

如评论中所建议,您应该将req_perms替换为scope,因为它是指示用户授予哪些权限的字段名称。

一旦获得了email权限(您在认证对话框中看到它被要求吗?),您就可以通过Graph API获取email字段。您还可以通过在fields参数中指定它们来仅检索结果中的必需字段:

$facebook->api('/me', array('fields' => 'id,email'));

顺便提一下,请注意你所参考的两篇文章都比较老了(2010年),平台上已经发生了很多变化。请务必阅读更新后的权限认证文档。


终于我找到了如何获取用户数据的方法!谢谢! :) - ci_lover

4

您正在使用过时的方法。您可以使用以下代码检索电子邮件。

您可以在此处找到有关Facebook Connect的更多信息:http://25labs.com/tutorial-integrate-facebook-connect-to-your-website-using-php-sdk-v-3-x-x-which-uses-graph-api/

$app_id     = "xxxxxxxxx";
$app_secret = "xxxxxxxxxx";
$site_url   = "xxxxxxxxxxxxx";

include_once "src/facebook.php";

$facebook = new Facebook(array(
    'appId'     => $app_id,
    'secret'    => $app_secret,
    ));

$user = $facebook->getUser();

if($user){
    try{
        $user_profile = $facebook->api('/me');
    }catch(FacebookApiException $e){
        $user = NULL;
    }
}

if($user){
    $logoutUrl = $facebook->getLogoutUrl();
}else{
    $loginUrl = $facebook->getLoginUrl(array(
        'scope'         => 'email',
        'redirect_uri'  => $site_url,
        ));
}

if($user){
    Echo "Email : " . $user_profile['email'];
}

0
你可以将Facebook用户名与电子邮件地址连接起来。例如,我的Facebook用户名是“umair.hamid.79”,那么它的电子邮件地址就是“umair.hamid.79@facebook.com”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接