Facebook PHP SDK如何从Facebook JavaScript SDK 2014获取用户电子邮件

use*_*569 4 javascript php sdk facebook facebook-graph-api

我同时使用Facebook PHP(4.0)和JS(2.0)SDK.我可以使用PHP但不是用户的电子邮件来获取用户配置文件数据.用户的电子邮件可以使用Javascript SDK,但我需要在PHP中使用它.

我用的是:

$user_profile = (new FacebookRequest($session, 'GET', '/me'))->execute()->getGraphObject(GraphUser::className()); 
Run Code Online (Sandbox Code Playgroud)

这有效但GraphUser类没有在4.0中获取用户电子邮件的功能.

有关如何使用Facebook PHP SDK 4.0获取用户电子邮件的任何想法?

mas*_*tic 13

// Facebook SDK v5 for PHP
// https://developers.facebook.com/docs/php/howto/example_access_token_from_javascript/5.0.0

session_start();

$fb = new Facebook\Facebook([
  'app_id' => '{app-id}',
  'app_secret' => '{app-secret}',
  'default_graph_version' => 'v2.4',
]);

$helper = $fb->getJavaScriptHelper();
$accessToken = $helper->getAccessToken();

$fb->setDefaultAccessToken((string) $accessToken);

$response = $fb->get('/me?locale=en_US&fields=name,email');
$userNode = $response->getGraphUser();

var_dump(
    $userNode->getField('email'), $userNode['email']
);
Run Code Online (Sandbox Code Playgroud)


Fos*_*sco 11

GraphUser继承自GraphObject那么你应该能够使用泛型方法来获取一个字段:

$user_profile->getProperty("email");
Run Code Online (Sandbox Code Playgroud)

  • 这只适用于`$ helper = new\Facebook\FacebookRedirectLoginHelper('your url'); $ helper-> getLoginUrl(array('scope'=>'email'));`获取LoginURL时调用`. (5认同)

小智 10

将登录URL更改为

$loginUrl = $facebook->getLoginUrl(array(
   'scope' => 'email'
 ));
Run Code Online (Sandbox Code Playgroud)

您还可以添加其他权限

$loginUrl = $facebook->getLoginUrl(array(
   'scope' => 'email, user_activities '
 ));
Run Code Online (Sandbox Code Playgroud)

在获得登录URL之前请求权限.

与Facebook登录检查权限这里

所以你可以收到用户邮件

 $user_profile['email'];
Run Code Online (Sandbox Code Playgroud)

和用户名

$user_profile['username'];
Run Code Online (Sandbox Code Playgroud)