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

时间:2012-03-19 09:45:30

标签: php facebook facebook-graph-api

我一遍又一遍地阅读this post,但这对我来说没有意义。

我想要做的是获取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上的正确位置。

但是后来有this suggested line of code,这意味着它会返回一个电子邮件地址,但是当我回复它以查看它的外观时,它不会返回一个电子邮件地址:

echo "<br/>" . $facebook->getLoginUrl(array('req_perms' => 'email'));

我觉得它不会,因为它对我来说看起来不太合适,但另一方面,我只是不知道还有什么用它或放在哪里。

然后我也遇到了this post,其代码与HTML混合在一起让我更加困惑。

假设我的用户已授予我的应用查看其电子邮件的权限,是不是有一种简单的方法来获取它?像我这样没有经验的程序员可以掌握的东西?

3 个答案:

答案 0 :(得分:4)

根据评论中的建议,您应将req_perms替换为scope,因为它是字段的名称,表明用户授予哪个permissions

授予email权限后(您是否在Auth对话框中看到它?)您将能够通过Graph API获得email字段。您还可以通过在fields参数中指定&em; em来仅检索结果中的必填字段:

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

顺便说一句,请注意,您提到的这两个帖子都是旧的(2010年),平台上的许多内容都发生了变化。请务必阅读PermissionsAuthentication

上的最新文档

答案 1 :(得分:4)

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

您可以从http://25labs.com/tutorial-integrate-facebook-connect-to-your-website-using-php-sdk-v-3-x-x-which-uses-graph-api/

找到有关Facebook Connect的更多信息
$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'];
}

答案 2 :(得分:0)

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