Я использую 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"]); } ?>
предоставит вам информацию о текущем входе пользователя, но вам нужно указать токен oauth. Видеть:
Электронная почта в профиле может быть получена с использованием расширенного разрешения, но я думаю, что невозможно получить электронное письмо, используемое для входа в fb. В моем приложении мне захотелось отобразить mulitple fb-учетные записи пользователя в списке, я хотел показать учетные записи электронной почты учетных записей fb как уникальный идентификатор соответствующих учетных записей, но я не мог получить его с fb, все, что я получил, было основной адрес электронной почты в профиле пользователя, но в моем случае мой адрес электронной почты для входа и мое основное электронное письмо отличаются.
Убедитесь, что ваше приложение Facebook опубликовано. Чтобы получать данные для электронной почты, public_profile и user_friends, ваше приложение должно быть доступно для общественности.
Вы можете отключить его позже для целей разработки и получить поле электронной почты.
В процессе разработки могут быть полезны следующие инструменты:
Отладчик токена доступа: вставьте в токен доступа подробные сведения
https://developers.facebook.com/tools/debug/accesstoken/
Graph API Explorer: тестовые запросы к графику api после вставки в токен доступа
Обязательно укажите номер версии API как "v2.11"
а не "2.11"
Я не уверен, что он по умолчанию, если это неверно, но я получил некоторые нечетные ошибки, пытаясь просто получить электронную почту, когда я пропустил v
.