Как получить идентификатор электронной почты пользователя в приложении Facebook, используя PHP? - PullRequest
7 голосов
/ 29 июля 2010

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

require_once('facebook.php');
require_once('config.php');
$facebook = new Facebook(APIKEY, SECRETKEY);
$user=$facebook->require_login();

echo $user; // displaying the ID
<div style="padding: 10px;" id="greeting">
   <fb:if-is-app-user uid="loggedinuser">
      <h2>Hi <fb:name firstnameonly="true" uid="loggedinuser" useyou="false"/>! welcome to facebook</h2>
  <fb:else>
       <h2>Hi <fb:name firstnameonly="true" uid="loggedinuser" useyou="false"/>! welcome to facebook</h2>
   </fb:else>
   </fb:if-user-has-added-app>
</div>

Вывод, который я получаю,

1000002020202020
Hi User! welcome to facebook

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

Ответы [ 3 ]

8 голосов
/ 05 августа 2010

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

// initialize facebook
 $facebook = new Facebook(array(
        'appId' => APP_ID,
        'secret' => APP_SECRET));

 $session = $facebook->getSession();
 if ($session) {
 try {
    $fbme = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
  }
}
else
{
  echo "You are NOT Logged in";
}

//getting the login page if not signned in
if (!$fbme) {
  $loginUrl = $facebook->getLoginUrl(array('canvas' => 1,
                                      'fbconnect' => 0,
                                      'req_perms' =>                   'email,user_birthday,publish_stream',
                                      'next' => CANVAS_PAGE,
                                      'cancel_url' => CANVAS_PAGE ));
 echo '<fb:redirect url="' . $loginUrl . '" />';
 } else {

      // $fbme is valid i.e. user can access our app
     echo "You can use this App";
 }

 // getting the profile data
 $user_id = $fbme[id];
 $name=$fbme['name'];
 $first_name=$fbme['first_name'];
 $last_name=$fbme['last_name'];
 $facebook_url=$fbme['link'];
 $location=$fbme['location']['name'];
 $bio_info=$fbme['bio'];
 $work_array=$fbme['work'];
 $education_array=$fbme["education"];
 $email=$fbme['email'];
 $date_of_birth=$fbme['birthday'];

Этот код сработал для меня ... и я иду всю информацию, необходимую с идентификатором электронной почты.

NOTE: User has to allow us to get their Information during the Approval of Application.
2 голосов
/ 03 августа 2010

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

Вот пример использования нового PHP SDK и API Graph:

<?php

require_once($_SERVER['DOCUMENT_ROOT'] . '/includes/config.php');

// initialize facebook
$facebook = new Facebook(array(
            'appId' => APP_ID,
            'secret' => APP_SECRET));

$user = $facebook->getUser();
$session = $facebook->getSession();

// in case we don't have a valid session, we redirect asking for email extended permissions
if ($user == null || $session == null) {
  $params = array();
  $params["canvas"] = "1";
  $params["fbconnect"] = "0";
  $params["next"] = CANVAS_URL;
  $params["req_perms"] = "email";

  $loginUrl = $facebook->getLoginUrl($params);

  echo '<fb:redirect url="' . $loginUrl . '"/>';
  exit();
}

// get user email via the new graph api, using the fql.query method
$url = "https://api.facebook.com/method/fql.query";
$url .= "?access_token=" . $session['access_token'];
$url .= "&query=SELECT email FROM user WHERE uid={$user}";
$userData = simplexml_load_file($url);
$userEmail = $userData->user->email;

echo 'The user ID is: ' . $user;
echo 'The user name is: <fb:name uid="' . $user . '" />';
echo 'The user email is: ' . $userEmail;
1 голос
/ 02 ноября 2010

Спасибо за помощь.Наконец-то я выясняю, как это сделать.

Сначала мне нужно получить токен доступа, а не пользовательский сеанс, а тот, что для администратора.

Итак, вот код:

$url = 'https://graph.facebook.com/oauth/access_token';
$ch = curl_init();
$params = array(
                'grant_type'=>'client_credentials',
                'client_id'=>$appId,
                'client_secret'=>$secret,
                );

$opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&');
// set URL and other appropriate options
curl_setopt_array($ch, $opts);
curl_setopt($ch, CURLOPT_URL, "$url");
curl_setopt($ch, CURLOPT_HEADER, 0);

// grab URL and pass it to the browser
$adminAccessToken = curl_exec($ch);
// close cURL resource, and free up system resources
curl_close($ch);

И затем я могу использовать API Facebook, чтобы получить любого пользователя, который принимает приложение и расширенное разрешение, например:

$fql    =   "select name, hometown_location, sex, pic_square, email from user where uid=1000000001";
    $param  =   array(
       'method'     => 'fql.query',
        'query'     => $fql,
        'access_token' =>$adminAccessToken ,
      'callback'    => ''
    );

    $fqlResult2   =   $facebook->api($param);

с токеном доступа, я также могу публиковать вещи на стене пользователя.:)

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