2012-09-07 81 views
0

我正在試圖用facebook API獲取用戶生日。我知道我們現在需要徵求這方面的許可。我真的不知道它是如何工作用API獲取facebook用戶生日

剛剛發現這個補充:

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

<fb:login-button autologoutlink="true" perms="email,user_birthday,status_update,publish_stream"></fb:login-button> 

,這是我的整個代碼(基本相當):

<?php 
require 'php-sdk/src/facebook.php'; 
$facebook = new Facebook(array(
      'appId' => '4539768XXXXX', 
      'secret' => 'fe86f3b0b34b3eXXXXXXXXXX', 
      'cookie' => true, 
     )); 

$signedRequest = $facebook->getSignedRequest(); 
$liked = $signedRequest["page"]["liked"]; 


// Get User ID 
$user = $facebook->getUser(); 



if ($user) { 
    try { 
     // Proceed knowing you have a logged in user who's authenticated. 
     $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
     error_log($e); 
     $user = null; 
    } 
} 

// Login or logout url will be needed depending on current user state. 
if ($user) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
} else { 
    $loginUrl = $facebook->getLoginUrl(
    array('req_perms' => 'email,read_stream') 
); 
} 
?> 


<!doctype html> 
<html xmlns:fb="http://www.facebook.com/2008/fbml"> 
    <head> 
     <style> 
      body { 
       font-family: 'Lucida Grande', Verdana, Arial, sans-serif; 
      } 
      h1 a { 
       text-decoration: none; 
       color: #3b5998; 
      } 
      h1 a:hover { 
       text-decoration: underline; 
      } 
     </style> 

    </head> 
    <body> 


     <?php 
     if ($liked) { 
      header("Location:youlike.php"); 
     } else { 
      echo "you don't like yet"; 
     } 
     ?> 


<fb:login-button autologoutlink="true" perms="email,user_birthday,status_update,publish_stream"></fb:login-button> 

     <?php if ($user): ?> 
      <a href="<?php echo $logoutUrl; ?>">Logout</a> 
     <?php else: ?> 
      <div> 
       Login: 
       <a href="<?php echo $loginUrl; ?>">Login with Facebook</a> 
      </div> 
     <?php endif ?> 

     <?php if ($user): ?> 
      <h3>Vous</h3> 
      <img src="https://graph.facebook.com/<?php echo $user; ?>/picture"> 

      <h3>Personne connectée</h3> 
      <pre><?php print_r($user_profile); ?></pre> 
     <?php else: ?> 
      <strong><em>Vous n'etes pas loggé!</em></strong> 
     <?php endif ?> 


    </body> 
    <script> 
    </script> 
</html> 

我會感謝你的幫助 提前致謝!

+0

我認爲他們只允許你看到用戶的年齡,而不是他們的生日。否則,這可能是一個安全風險。 – think123

+0

其實看起來我們仍然可以:看看這裏:http://developers.facebook.com/docs/reference/api/user/ – Slrg

+0

哦,在這種情況下,我錯了。 – think123

回答

6

在代碼中有幾個問題。

首先,當您創建$loginUrl時,您並未要求user_birthday權限。您應該在第33行請求與req_perms相同的權限,就像您在代碼的第68行<fb:login-button>中所做的那樣:email,user_birthday,status_update,publish_stream

複製完權限後,可以刪除代碼的第68行。如果沒有JavaScript SDK,<fb:login-button>標記將無法使用。

在第37行的文本輸出到瀏覽器後,在第61行調用header()將不起作用。如果您要重定向瀏覽器,則只能在輸出文本之前之前。在輸出任何內容之前移動這段代碼,它將起作用。

第36行的?>和第39行的<!doctype>之間的空白將輸出到HTML文件的頂部。它會導致Facebook解析器窒息。某些瀏覽器不喜歡HTML文檔開頭的空格,並且會錯誤地呈現頁面。你的代碼真的應該是?><!doctype