2015-10-26 54 views
0

我有一個小問題涉及Facebook SDK 4.4.0/API 2.3用戶的電子郵件的檢索。如何使用SDK 4.4.0和API 2.3從Facebook用戶配置文件中檢索電子郵件?

我通過Facebook的開發者創建領域我的應用程序,實際上我在我的PHP腳本的目標是通過我的Facebook應用程序登錄到Facebook來獲取登錄用戶的一些信息在我的網站上創建一個基本的輪廓。 我有兩個PHP腳本,第一個獲取Facebook的登錄URL,第二個獲取認證後的用戶數據。

的login.php

require_once(dirname(__FILE__).'/libs/facebook-php-sdk-v4-4.0-dev/autoload.php'); 

Facebook\FacebookSession::setDefaultApplication($a_config['settings']['facebook_app_id'], $a_config['settings']['facebook_app_secret']); 

$o_helper = new Facebook\FacebookRedirectLoginHelper($s_facebook_login_backurl); 
$s_facebook_login_url = $o_helper->getLoginUrl(); 

通過這個$ s_facebook_login_url我的Facebook應用程序登錄,驗證自己作爲一個用戶,然後回到我的第二個腳本通過參數$ s_facebook_login_backurl。在這裏,我有我的命令從我的配置文件中獲取數據。我需要的一切工作都很好,除了電子郵件,這個元素沒有找到。

registration.php的

require_once(dirname(__FILE__).'/libs/facebook-php-sdk-v4-4.0-dev/autoload.php'); 

Facebook\FacebookSession::setDefaultApplication($a_config['settings']['facebook_app_id'], $a_config['settings']['facebook_app_secret']); 


$o_social = Facebook\FacebookSession::newAppSession(); 
try { 
     $o_social->validate(); 
} 
catch(...){ 
    // exceptions 
} 

$o_helper = new Facebook\FacebookRedirectLoginHelper($s_facebook_login_backurl); 
$o_social = $o_helper->getSessionFromRedirect(); 

然後

$s_request = '/me?fields=id,name,email,last_name,first_name,middle_name'; 
$o_request = new Facebook\FacebookRequest($o_social, 'GET', $s_request); 
$o_response = $o_request->execute(); 

$o_graph_object = $o_response->getGraphObject(); 
$a_media = $o_graph_object->asArray(); 
$s_facebook_id = $a_media['id']; 
$s_facebook_name = $a_media['first_name']; 
$s_facebook_inbetweenname = $a_media['middle_name']; 
$s_facebook_surname = $a_media['last_name']; 
$s_facebook_email = $a_media['email']; 

的問題是,s_facebook_email最後一個變量$完全是空的。

在facebook的開發人員區域中,在Graph API Explorer中,我甚至會將我的GET請求測試到我的Facebook應用程序,並檢索電子郵件,我設置用戶的權限(用戶數據權限)和電子郵件(在擴展權限中),但通過SDK電子郵件是唯一缺少的元素。

enter image description here

我想甚至從我的用戶設置,刪除應用程序,並再次給予身份驗證,但沒有奏效。 有沒有人有一些想法來獲得電子郵件? 我在網上找幾乎總是相同的建議,但可能我錯過了一些東西。

在此先感謝

+1

你需要問你的登錄對話框中的呼叫權限。去檢查'getLoginUrl'方法的文檔。 – CBroe

回答

0

按照該docs,你可以指定你想從用戶問什麼權限:

# login.php 
$fb = new Facebook\Facebook([/* . . . */]); 

$helper = $fb->getRedirectLoginHelper(); 
$permissions = ['email', 'user_likes']; // optional 
$loginUrl = $helper->getLoginUrl('http://{your-website}/login-callback.php', $permissions); 

echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>'; 
相關問題