How to get Users Email Id in Facebook application using PHP?

前端 未结 3 1461
感情败类
感情败类 2020-12-28 23:04

I have created a simple Facebook application in PHP, that greets user by there user name, I also want there Email id, to be displayed. But i am not able to do that. the code

相关标签:
3条回答
  • 2020-12-28 23:36

    You need to ask for extended permissions when the user authorizes your application, so you can have access to the user email.

    Here's an example using the new PHP SDK and the Graph API:

    <?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;
    
    0 讨论(0)
  • 2020-12-28 23:40

    You can get the Email Address, directly without using the 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'];
    

    This code worked for me..and i go all the information needed with the Email ID.

    NOTE: User has to allow us to get their Information during the Approval of Application.
    
    0 讨论(0)
  • 2020-12-28 23:49

    Thanks for all the help. I finally figure out how to do that.

    first, I need to get the access token, NOT the user session one, but the one for admin.

    So, here is the code:

    $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);
    

    And then, I can use the facebook API to get any user who accept the application and the extended permission like that:

    $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);
    

    with the access token, i can also post things onto user's wall. :)

    0 讨论(0)
提交回复
热议问题