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


How to get the email address of a Facebook user using the graph API?

我已经一遍又一遍地阅读了这篇文章,但它对我来说没有意义。

我想做的是获取一个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混合在一起,这让我更加困惑。

假设我的用户已经授予我的应用程序查看他们电子邮件的权限,难道没有一个简单的方法来获取它吗?像我这样没有经验的程序员能掌握的东西?

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

您可以从以下位置找到有关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'];
}

根据注释中的建议,您应该将req_perms替换为scope,因为它是指示用户授予哪个permissions的字段的名称。

一旦授予了email权限(您看到Auth对话框中询问了该权限吗?),您就可以通过Graph API获取email字段。您还可以通过在fields参数中指定'em来仅检索结果中的必填字段:

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

BTW,请不要说你提到的两个帖子都是旧的(2010年),平台上的很多事情都发生了变化。请务必阅读有关权限和身份验证的更新文档

您可以将Facebook用户名与电子邮件地址连接起来。例如,我在Facebook上的用户名是"umair.hamid.79"。它将是"umair.hamid.79@facebook.com".

相关文章: