Facebook Graph API,如何获取用户的电子邮件?

我正在使用graphicsAPI,但我不知道如何获取login用户的电子邮件地址。

Graph的介绍状态:“Graph API可以访问您通常在registry单中为您的网站请求的所有基本帐户注册数据,包括姓名,电子邮件地址,个人资料照片和生日”

一切顺利,但如何获得这些信息?

这是我迄今为止:

$json = $facebook->api('/me'); $first = $json['first_name']; // gets first name $last = $json['last_name']; 

获取用户电子邮件地址的唯一方法是请求电子邮件字段的扩展权限。 用户必须允许你看到这个,你不能得到用户的朋友的电子邮件地址。

http://developers.facebook.com/docs/authentication/permissions

如果使用Facebook连接,则可以通过将调用的string中的scope = email传递给身份validation对话框来执行此操作。

我build议使用SDK而不是file_get_contents,因为它使得执行Oauth身份validation变得容易得多。

 // Facebook SDK v5 for PHP // https://developers.facebook.com/docs/php/gettingstarted/5.0.0 $fb = new Facebook\Facebook([ 'app_id' => '{app-id}', 'app_secret' => '{app-secret}', 'default_graph_version' => 'v2.4', ]); $fb->setDefaultAccessToken($_SESSION['facebook_access_token']); $response = $fb->get('/me?locale=en_US&fields=name,email'); $userNode = $response->getGraphUser(); var_dump( $userNode->getField('email'), $userNode['email'] ); 

打开base_facebook.php在函数getLoginUrl()添加Access_token

 array_merge(array( 'access_token' => $this->getAccessToken(), 'client_id' => $this->getAppId(), 'redirect_uri' => $currentUrl, // possibly overwritten 'state' => $this->state), $params); 

和使用范围的电子邮件许可

 if ($user) { echo $logoutUrl = $facebook->getLogoutUrl(); } else { echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream')); } 

要获取用户电子邮件,您必须使用email许可权以他的Facebook帐户login用户。 用于Facebook PHP SDK( 请参阅github )如下。

首先检查用户是否已经login:

 require "facebook.php"; $facebook = new Facebook(array( 'appId' => YOUR_APP_ID, 'secret' => YOUR_APP_SECRET, )); $user = $facebook->getUser(); if ($user) { try { $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { $user = null; } } 

如果他没有,你可以显示login链接要求的email权限:

 if (!$user) { $args = array('scope' => 'email'); echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>'; } else { echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>'; } 

当他login时,可以在$user_profile数组中find该电子邮件。

希望有所帮助!

您可以从login用户的configuration文件中检索电子邮件地址。 这是代码片段

 <?php $facebook = new Facebook(array( 'appId' => $initMe["appId"], 'secret' => $initMe["appSecret"], )); $facebook->setAccessToken($initMe["accessToken"]); $user = $facebook->getUser(); if ($user) { $user_profile = $facebook->api('/me'); print_r($user_profile["email"]); } ?> 

https://graph.facebook.com/me

会给你关于当前login用户的信息,但是你需要提供一个oauth标记。 看到:

http://developers.facebook.com/docs/reference/api/user

在configuration文件中的电子邮件可以获得使用扩展权限,但我猜这是不可能得到用于loginfb的电子邮件。 在我的应用程序,我想显示列表中的用户多个fb帐户,我想显示fb帐户的login电子邮件作为各自帐户的唯一标识符,但我不能从fb得到它,我得到的是在用户configuration文件中的主要电子邮件,但在我的情况下,我的login电子邮件和我的主电子邮件是不同

确保您的Facebook应用程序已发布。 为了接收电子邮件,public_profile和user_friends的数据,您的应用程序必须公开。

您可以稍后为了开发目的而禁用它,并仍然收到电子邮件字段。