Получать электронную почту от пользователя Facebook

Я пытаюсь получить доступ к адресу электронной почты пользователя с помощью Facebook php SDK v 3.2.3

Код:

<?php


 require_once('facebook-php-sdk/src/facebook.php');
// Create our Application instance (replace this with your appId and secret).
$facebook= new Facebook(array(
  'appId' => 'xxxxxxx',
      'secret' => 'xxxxxxxxxxxxxxx',
      'allowSignedRequest' => false,
));

$_REQUEST += $_GET;
$user = $facebook->getUser();

if ($user) {
  try {

 $login_url = $facebook->getLoginUrl(array(
    'req_perms' => 'email'
  ));
  echo 'Please <a href="' . $login_url . '">login.</a>';

    $user_profile = $facebook->api('/me?fields=picture.width(100).height(100),first_name,last_name,username,email');
    echo $user_profile['email'];
    echo $user_profile['username'];

  } catch (FacebookApiException $e) {
    $user = null;
  }
} else {
  die('<script>top.location.href="'.$facebook->getLoginUrl().'";</script>');
}

?>

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

Я получаю сообщение об ошибке «Неопределенный индекс: электронная почта».

Как это исправить?


person Tester    schedule 24.01.2014    source источник
comment
Я прошу вас просто взглянуть на fbrell.com/examples. Вы получите некоторое представление.   -  person Wanna Coffee    schedule 24.01.2014
comment
Вы уверены, что функция $ facebook- ›api () возвращает формат array ()? попробуйте echo var_dump ($ user_profile), чтобы проверить ваш вывод   -  person har2vey    schedule 24.01.2014
comment
@ har2vey Ну, на самом деле, когда я пытаюсь повторить другие поля, такие как имя пользователя, он работает нормально. Я знаю, что это проблема с разрешениями при доступе к электронной почте, потому что электронная почта нормально отображается на localhost.   -  person Tester    schedule 24.01.2014
comment
Значит, в выводе $ user_profile «электронная почта» пуста? Если это так, то, скорее всего, это проблема с разрешением в вашем звонке, FB, насколько я помню, требует другой области для электронной почты.   -  person har2vey    schedule 24.01.2014
comment
@ har2vey, можете ли вы предоставить код для расширенных разрешений? Я искал в Интернете, но найти примеры с использованием области видимости не так просто. Код, который я пробовал выше, на самом деле взят из примера.   -  person Tester    schedule 24.01.2014
comment
в вашем $ login_url попробуйте вместо этого 'scope' = ›'email'   -  person har2vey    schedule 24.01.2014


Ответы (1)


Чтобы указать необходимые разрешения, вам необходимо передать их в массиве, переданном в функцию getLoginUrl с ключом scope.

$login_url = $facebook->getLoginUrl(array(
    'scope' => 'email'
));
person madebydavid    schedule 24.01.2014