Как получить адрес электронной почты пользователя Facebook с помощью API Graph? - PullRequest
4 голосов
/ 19 марта 2012

Я прочитал этот пост снова и снова, и все же это не имеет смысла для меня.

То, что я пытаюсь сделать, это получить адрес электронной почты пользователя Facebook, чтобы я мог сохранить его в строке и сравнить, чтобы увидеть, совпадает ли он с электронными письмами существующих пользователей в моей базе данных MySQL. Мне нужно делать это только тогда, когда пользователь впервые предоставляет права доступа к приложению.

В разделе «Аутентифицированные рефералы» в интерфейсе разработчика моего приложения я установил для «Полномочия пользователя и друга» включение «электронной почты».

В области "canvas" моего сайта у меня есть этот код:

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, я вижу идентификатор пользователя (хотя и немного другой), который кажется правильным, поэтому я считаю, что подключаюсь в нужном месте на Facebook.

Но затем была эта предложенная строка кода , которая подразумевает, что он возвращает адрес электронной почты, но когда я выводю его, чтобы посмотреть, как он выглядит, он не возвращает адрес электронной почты:

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

Я как бы думал, что это не так, поскольку мне это не совсем подходит, но, с другой стороны, я просто не знаю, что еще с этим делать и где его поставить.

А потом я также натолкнулся на этот пост , в котором есть код, смешанный с HTML, что еще больше сбивает меня с толку.

Если предположить, что мой пользователь разрешил моему приложению просматривать свою электронную почту, разве нет простого способа получить это? Что-нибудь такое неопытный программист, как я, может понять?

Ответы [ 3 ]

4 голосов
/ 19 марта 2012

Вы используете устаревший метод.Вы можете использовать приведенный ниже код для получения электронной почты.

Более подробную информацию о 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'];
}
4 голосов
/ 19 марта 2012

Как предлагается в комментариях, вы должны заменить req_perms на scope, поскольку это имя поля, указывающее, какие permissions должны быть предоставлены пользователями.

После предоставления разрешения email (сделайтеВы видите, что это спрашивается в диалоге аутентификации?) Вы сможете получить поле email через Graph API.Вы также можете получить только обязательные поля в результатах, указав их в параметре fields:

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

Кстати . Обратите внимание, что оба сообщения, на которые вы ссылаетесь, старые (2010)Многое изменилось в платформе.Обязательно прочитайте обновленную документацию по Разрешения и Аутентификация

0 голосов
/ 09 июля 2013

Вы можете объединить имя пользователя Facebook с адресом электронной почты.Например, мое имя пользователя «umair.hamid.79» на Facebook.Это будет "umair.hamid.79@facebook.com".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...