Php 如何从FB库获取电子邮件id
我想访问用户的电子邮件id,因为我尝试了下面的代码,为此我检查了许多网站。我找到了这些方法来访问用户的电子邮件id。但它们似乎都不起作用。请帮我解决这个问题 提前谢谢Php 如何从FB库获取电子邮件id,php,facebook,email,Php,Facebook,Email,我想访问用户的电子邮件id,因为我尝试了下面的代码,为此我检查了许多网站。我找到了这些方法来访问用户的电子邮件id。但它们似乎都不起作用。请帮我解决这个问题 提前谢谢 <?php session_start(); require_once 'autoload.php'; use Facebook\FacebookSession; use Facebook\FacebookRedirectLoginHelper; use Facebook\FacebookRequest; use Fac
<?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=newfacebookrequest($session,'GET','/me?fields=name,email')代码>
2> $request=newfacebookrequest($session,'GET','me',['fields'=>'id,name,email,address,first\u name,last\u name'])代码>
通过上述请求,我也无法获得用户的电子邮件id
是否有其他方式请求用户的电子邮件id。您需要在登录URL中使用范围来请求电子邮件
权限
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');
注意:如果用户不同意与您的应用程序共享电子邮件,您将无法获得该电子邮件。根据Facebook的政策,如果用户将电子邮件作为私人邮件保存,则无法获得该电子邮件,否则您可以使用以下行文获得该电子邮件
$helper->getLoginUrl($redirectUrl,array('scope'=>'email')代码>我刚刚尝试了这个选项。它说抱歉,此页面不可用。生成你的应用程序中是否设置了正确的重定向URL?你总是需要在范围内请求电子邮件权限,但这并没有改变。更改的是声明性字段。您应该更新答案,这有点误导。@Shubham,我看到您使用的是旧版本的facebook SDK(4),而这一版本有不同的语法。就像这样使用它:$loginUrl=$helper->getLoginUrl(数组('scope'=>'email')代码>$graphObject->getProperty('email')代码>应该可以正常工作。只需确保您请求电子邮件字段:$request=newfacebookrequest($session,'GET','/me?fields=email')代码>请注意,如果用户不同意与你的应用程序共享电子邮件,你将无法获得它。由此生成的URL无效。基本url是生成的,它不在facebook服务器上。在添加此项之前,基本url为,这很好。为了安全起见,只需确保您的电子邮件在Facebook帐户中是公开的。供您参考,请参阅此。是的,用户的电子邮件必须是公开的。您可以编写一个额外的if条件,如果电子邮件不存在,则向用户提供一个文本字段以输入其电子邮件地址