Facebook Graph API, как получить электронную почту пользователей?

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

Вступление к графику: «API-интерфейс Graph предоставляет доступ ко всем основным данным регистрации учетной записи, которые вы обычно запрашиваете в форме регистрации для вашего сайта, включая имя, адрес электронной почты, изображение профиля и день рождения»

Все хорошо и хорошо, но как мне получить доступ к этой информации?

Это то, что у меня есть до сих пор:

$json = $facebook->api('/me'); $first = $json['first_name']; // gets first name $last = $json['last_name']; 

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

http://developers.facebook.com/docs/authentication/permissions

Вы можете сделать это, если используете Facebook-соединение, передав scope = email в строке получения вашего вызова в Auth Dialog.

Я бы рекомендовал использовать SDK вместо file_get_contents, поскольку упростить выполнение Oauth- аутентификации.

 // Facebook SDK v5 for PHP // https://developers.facebook.com/docs/php/gettingstarted/5.0.0 $fb = new Facebook\Facebook([ 'app_id' => '{app-id}', 'app_secret' => '{app-secret}', 'default_graph_version' => 'v2.4', ]); $fb->setDefaultAccessToken($_SESSION['facebook_access_token']); $response = $fb->get('/me?locale=en_US&fields=name,email'); $userNode = $response->getGraphUser(); var_dump( $userNode->getField('email'), $userNode['email'] ); 

Откройте base_facebook.php Добавьте Access_token в функцию getLoginUrl()

 array_merge(array( 'access_token' => $this->getAccessToken(), 'client_id' => $this->getAppId(), 'redirect_uri' => $currentUrl, // possibly overwritten 'state' => $this->state), $params); 

и Область использования для разрешения электронной почты

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

Чтобы получить адрес электронной почты пользователя, вы должны войти в систему с учетной записью Facebook, используя разрешение email . Используйте для этого PHP PHP SDK ( см. Github ) следующим образом.

Сначала проверьте, зарегистрирован ли пользователь:

 require "facebook.php"; $facebook = new Facebook(array( 'appId' => YOUR_APP_ID, 'secret' => YOUR_APP_SECRET, )); $user = $facebook->getUser(); if ($user) { try { $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { $user = null; } } 

Если он его нет, вы можете отобразить ссылку для входа, запрашивающую разрешение на email :

 if (!$user) { $args = array('scope' => 'email'); echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>'; } else { echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>'; } 

Когда он зарегистрирован в электронной почте, можно найти в массиве $user_profile .

Надеюсь, это поможет !

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

 <?php $facebook = new Facebook(array( 'appId' => $initMe["appId"], 'secret' => $initMe["appSecret"], )); $facebook->setAccessToken($initMe["accessToken"]); $user = $facebook->getUser(); if ($user) { $user_profile = $facebook->api('/me'); print_r($user_profile["email"]); } ?> 

https://graph.facebook.com/me

предоставит вам информацию о текущем входе пользователя, но вам нужно указать токен oauth. Видеть:

http://developers.facebook.com/docs/reference/api/user

Электронная почта в профиле может быть получена с использованием расширенного разрешения, но я думаю, что невозможно получить электронное письмо, используемое для входа в fb. В моем приложении мне захотелось отобразить mulitple fb-учетные записи пользователя в списке, я хотел показать учетные записи электронной почты учетных записей fb как уникальный идентификатор соответствующих учетных записей, но я не мог получить его с fb, все, что я получил, было основной адрес электронной почты в профиле пользователя, но в моем случае мой адрес электронной почты для входа и мое основное электронное письмо отличаются.

Убедитесь, что ваше приложение Facebook опубликовано. Чтобы получать данные для электронной почты, public_profile и user_friends, ваше приложение должно быть доступно для общественности.

Вы можете отключить его позже для целей разработки и получить поле электронной почты.

В процессе разработки могут быть полезны следующие инструменты:

Отладчик токена доступа: вставьте в токен доступа подробные сведения

https://developers.facebook.com/tools/debug/accesstoken/

Graph API Explorer: тестовые запросы к графику api после вставки в токен доступа

https://developers.facebook.com/tools/explorer

Обязательно укажите номер версии API как "v2.11" а не "2.11"

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