我已经一遍又一遍地阅读了这篇文章,但它对我来说没有意义。
我想做的是获取一个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".