php - 如何从 FB 库获取电子邮件 ID

标签 php facebook email

我想访问用户的电子邮件 ID,为此我尝试了下面的代码,为此我检查了许多网站。我找到了这些访问用户电子邮件 ID 的方法。但它们似乎都不起作用。请帮我解决这个问题。

提前致谢。

<?php

session_start();
require_once 'autoload.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('MY_app_id', 'my_app_secret');
$helper = new FacebookRedirectLoginHelper('http://prov.resolv.com/provision_sid/Facebook_2/fbconfig.php');
try {
    $session = $helper->getSessionFromRedirect();
} catch (FacebookRequestException $ex) {
} catch (Exception $ex) {
}

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
    $fbfullname = $graphObject->getProperty('name');      // To Get Facebook full name
    echo $femail = $graphObject->getProperty('email'); 

    die();

    $_SESSION['FBID'] = $fbid;
    $_SESSION['FULLNAME'] = $fbfullname;
    $_SESSION['EMAIL'] = $femail;
    /* ---- header location after session ---- */


    header("Location: index.php");
} else {
    $loginUrl = $helper->getLoginUrl();
    header("Location: " . $loginUrl);
}
?>

我尝试了多种选项来请求电子邮件 ID

1> $request = new FacebookRequest($session, 'GET', '/me?fields=name,email');

2> $request = new FacebookRequest($session, 'GET', '/me',['fields' => 'id,name,email,address,first_name,last_name']);

通过上述请求,我也无法获取用户的电子邮件 ID。

是否有其他方法来请求用户的电子邮件 ID。

最佳答案

您需要通过在登录 URL 中使用 scope 来请求 email 权限。

SDK版本5:

$loginUrl = $helper->getLoginUrl($redirectUrl, array('scope' => 'email'));

SDK版本4:

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

不要忘记还请求电子邮件字段:

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

注意:如果用户不同意与您的应用共享电子邮件,您将不会收到电子邮件。

关于php - 如何从 FB 库获取电子邮件 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39889878/

相关文章:

ruby-on-rails - Rails 4 - 如何使用delayed_job发送类似新闻通讯的电子邮件?

javascript - 将 php json 解析为 javascript

php - PHP 中 UTF-8 字符串的字节数组?

iphone - 用户授权应用程序后解析 api 删除 'you already authorized this app'

facebook - 我可以在 Facebook 即时文章中使用自定义网页字体吗?

ios - 通过电子邮件 ios 发送对象和应用程序链接

php - 如何回显同一表中 2 列的结果 - PHP

php - 使用 PHP/Codeigniter 连接到远程数据库(EC2 实例)?

c# - facebook登录Win10应用程序的问题

ruby-on-rails - Rails ActionMailer "Pretty Name"阻止发送