无法弄清楚如何从 facebook PHP SDK 获取电子邮件

Can't figure out how to get email from facebook PHP SDK

我想在用户使用 facebook 在我的网站上注册时捕获他们的电子邮件地址。我有以下代码:

session_start();
added in v4.0.0
require_once 'autoload.php';
/******function to store users' value******/
require_once 'functions.php';

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\Entities\AccessToken;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;
// init app with app id and secret
FacebookSession::setDefaultApplication( '*****app id****','***Secret key****' );
// login helper with redirect_uri
    $helper = new FacebookRedirectLoginHelper('http://mykadamtala.com/facebook/fbconfig.php' );


try {
  $session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
  // When Facebook returns an error
} catch( Exception $ex ) {
  // When validation fails or other local issues
}
// see if we have a session
if ( isset( $session ) ) {
  // graph api request for user data
  $request = new FacebookRequest( $session, 'GET', '/me' );
  $response = $request->execute();

     // get response
        $graphObject = $response->getGraphObject();
        $fbid = $graphObject->getProperty('id');              // To Get Facebook ID
        $firstname = $graphObject->getProperty('first_name');
        $lastname = $graphObject->getProperty('last_name');
        $fbfullname = $graphObject->getProperty('name');
        $gender = $graphObject->getProperty('gender');
        $femail = $graphObject->getProperty('email'); //This of course does not work


    /* ---- Session Variables -----*/
        $_SESSION['FBID'] = $fbid;  
        $_SESSION['EMAIL'] =  $femail; //Nothing stores here
        $_SESSION['GENDER'] = $gender;             
        $_SESSION['FULLNAME'] = $fbfullname;

        adduser($fbid,$firstname, $lastname, $femail);
    /* ---- header location after session ----*/
  header("Location: index.php");
} else {
  $loginUrl = $helper->getLoginUrl();
 header("Location: ".$loginUrl);
}

用户的 ID、性别、名字、姓氏都存储得很好。但是没有捕获电子邮件。在这里搜索我得到这个插入脚本:

 $getemail = $helper->getLoginUrl(array(
   'scope' => 'email
 ));

但我很困惑在哪里包含它以及如何最终将电子邮件存储在变量中以便我的 adduser() 函数可以将电子邮件地址存储在数据库中。我将非常感谢您的帮助。

它属于你的最后一个 else 区块:

...
else {
  $loginUrl = $helper->getLoginUrl(array(
   'scope' => 'email'
  ));
  header("Location: ".$loginUrl);
}
$request = new FacebookRequest( $session, 'GET', '/me?  fields=id,name,first_name,last_name,gender,email' );
$response = $request->execute();

$graphObject = $response->getGraphObject();
$fbid = $graphObject->getProperty('id');
$fbfullname = $graphObject->getProperty('name');full name
$femail = $graphObject->getProperty('email');
$firstname = $graphObject->getProperty('first_name');
$lastname = $graphObject->getProperty('last_name');
$gender = $graphObject->getProperty('gender');

将此参数用于电子邮件 ID ?locale=en_US&fields=name,email

$request = new FacebookRequest( $session, 'GET', '/me?locale=en_US&fields=name,email' );

使用此代码

session_start();
added in v4.0.0
require_once 'autoload.php';
/******function to store users' value******/
require_once 'functions.php';

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\Entities\AccessToken;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;
// init app with app id and secret
FacebookSession::setDefaultApplication( '*****app id****','***Secret key****' );
// login helper with redirect_uri
    $helper = new FacebookRedirectLoginHelper('http://mykadamtala.com/facebook/fbconfig.php' );


try {
  $session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
  // When Facebook returns an error
} catch( Exception $ex ) {
  // When validation fails or other local issues
}
// see if we have a session
if ( isset( $session ) ) {
  // graph api request for user data
  $request = new FacebookRequest( $session, 'GET', '/me?  fields=id,name,first_name,last_name,gender,email' );
  $response = $request->execute();

     // get response
        $graphObject = $response->getGraphObject();
        $fbid = $graphObject->getProperty('id');              // To Get Facebook ID
        $firstname = $graphObject->getProperty('first_name');
        $lastname = $graphObject->getProperty('last_name');
        $fbfullname = $graphObject->getProperty('name');
        $gender = $graphObject->getProperty('gender');
        $femail = $graphObject->getProperty('email'); //This of course does not work


    /* ---- Session Variables -----*/
        $_SESSION['FBID'] = $fbid;  
        $_SESSION['EMAIL'] =  $femail; //Nothing stores here
        $_SESSION['GENDER'] = $gender;             
        $_SESSION['FULLNAME'] = $fbfullname;

        adduser($fbid,$firstname, $lastname, $femail);
    /* ---- header location after session ----*/
  header("Location: index.php");
} else {
  $loginUrl = $helper->getLoginUrl(array(
   'scope' => 'email'
  ));
  header("Location: ".$loginUrl);
}

它属于你的最后一个 else 区块:

...
else {
  $loginUrl = $helper->getLoginUrl(array(
   'scope' => 'email'
  ));
  header("Location: ".$loginUrl);
}