2012-01-12 22 views
1

當試圖從Facebook的圖形API訪問的信息,在這裏我明明做錯事是我的網頁代碼:不對勁,跟我的Facebook圖表URL

它獲取一切,我需要比其他用戶電子郵件地址,我知道你需要延長的權限,我已經要求在我的代碼如下所示。

require 'src/facebook.php'; 
$app_id = "211665122244023"; 


    $canvas_page = "http://apps.facebook.com/midcitymafia/"; 

    $auth_url = "https://www.facebook.com/dialog/oauth?client_id=" 
      . $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=email,publish_actions"; 

    $signed_request = $_REQUEST["signed_request"]; 

    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true); 

$user_id = $data["user_id"]; 
    if (empty($data["user_id"])) { 
      echo("<script> top.location.href='" . $auth_url . "'</script>"); 
    } else { 
         $graph1 = file_get_contents ("https://graph.facebook.com/".$user_id . "/?accesstoken=" . $data["oauth_token"]); 
     $graph=json_decode($graph1,true); 
    } 



$userid = $user_id; 
$username = $graph['name']; 
$usergender = $graph['gender']; 
$useremail = $graph['email']; 

?> 

<br> 

<?php echo 'ID: ' . $userid; ?> 
<br> 
<?php echo 'Name: ' . $username; ?> 
<br> 
<?php echo 'Gender: ' . $usergender; ?> 
<br> 
<?php echo 'Email: ' . $useremail; ?> 

我甩了$圖形變量數組,看看它是什麼召開的信息,這是結果:

array(7) { ["id"]=> string(10) "1469088864" ["name"]=> string(10) "Jack Brown" ["first_name"]=> string(4) "Jack" ["last_name"]=> string(5) "Brown" ["username"]=> string(11) "thebestjack" ["gender"]=> string(4) "male" ["locale"]=> string(5) "en_GB" } 

它不包含電子郵件地址,所以顯然與訪問的問題令牌/使用訪問令牌訪問圖形。

當我去我的授權的應用程序在我的Facebook帳戶設置這個程序,它說,在「此應用程式需要您的電子郵件地址‘[email protected]

+0

支付一點「讚賞,這是不不會鼓勵你回答你的問題。事實上,它可能會做相反的事情。 – Abbas 2012-01-12 13:10:41

+0

好吧,想你可以幫忙嗎? – 2012-01-12 13:16:35

+0

如果您編輯您的問題並添加輸出,它將有助於診斷。此外,用isset檢查$ graph ['email']以查看它是否實際爲空或空。 – Abbas 2012-01-12 13:20:39

回答

0

您有任何請求$_REQUEST["signed_request"],沒有按「T的問題,如果用戶授權您的應用程序或沒有。你有它甚至還沒有登錄到Facebook的所有誰的用戶。

使用的PHP SDK來當你的「將檢索用戶的配置文件http://developers.facebook.com/docs/reference/php/facebook-api/

<?php 
require_once('php-sdk/facebook.php'); 

$config = array(
    'appId' => '211665122244023', 
    'secret' => 'YOUR_APP_SECRET', 
); 

$facebook = new Facebook($config); 
$user_id = $facebook->getUser(); 
$login_url = $facebook->getLoginUrl(array(
    scope => 'email,publish_actions', 
    redirect_uri => $canvas_page,)); 

if($user_id) { 
    try { 
    $user_profile = $facebook->api('/' . $user_id,'GET'); 
    $userid = $user_id; 
    $username = $user_profile['name']; 
    $usergender = $user_profile['gender']; 
    $useremail = $user_profile['email']; 

    } catch(FacebookApiException $e) { 
    echo("<script> top.location.href='" . $login_url . "'</script>"); 
    error_log($e->getType()); 
    error_log($e->getMessage()); 
    } 
} else { 
    echo("<script> top.location.href='" . $login_url . "'</script>"); 
} 
?> 
<?php if (isset($useremail)) : ?> 
<br> 
<?php echo 'ID: ' . $userid; ?> 
<br> 
<?php echo 'Name: ' . $username; ?> 
<br> 
<?php echo 'Gender: ' . $usergender; ?> 
<br> 
<?php echo 'Email: ' . $useremail; ?> 
<?php endif; ?> 
+0

非常感謝,單詞無法解釋我現在擁有多少愛!在這樣的4/5天之前,請盡情享受!再次感謝你! – 2012-01-12 17:18:47

+0

對不起,但要添加這些細節數據庫,我會添加查詢下線: $ useremail = $ user_profile ['email']; 謝謝, 傑克 – 2012-01-12 17:27:57

+0

簡短的回答 - 沒有。 詳細信息在這裏[Facebook平臺政策](http://goo.gl/2OIr0) 它說:_對於通過使用Facebook API獲得的所有其他數據,您必須獲得提供數據的用戶的明確同意我們在將它用於任何目的之前,除了在應用程序上將其顯示回用戶之外._ 此時您沒有此_explicit consent_,因此您無法將其存儲在數據庫中。 – 2012-01-12 17:42:32