facebook - 如何使用phpsdk和js sdk获取用户ID

时间:2013-02-20 21:34:11

标签: facebook facebook-javascript-sdk

我正在实施我的fb应用程序,它已连接到自己的fb粉丝页面。我需要获取用户名,ID等用户信息,但当我点击“Facebook身份验证”链接时,我最终会进入一个空白页面?  您可以在此处查看我的代码:http://codepad.org/f0Tuh63v

 error_reporting(E_ALL);
 ini_set('display_errors', true);

 require 'facebook/facebook.php';

   $facebook = new Facebook(array(
 'appId'  => '1',
 'secret' => '2',
));


// See if there is a user from a cookie
 $user = $facebook->getUser();

if ($user) {
  try {
   // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
   print_r($user_profile);
   } catch (FacebookApiException $e) {
   echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
   $user = null;
 }
}
else{
$loginUrl = $facebook->getLoginUrl(
        array('scope' => 'user_about_me,user_birthday,email,publish_actions,offline_access,user_hometown,user_location',
              'redirect_uri' => "https://domain.net/intro.php"
        )
); // end of array

}
?>
 <!DOCTYPE html>
  <html xmlns:fb="http://www.facebook.com/2008/fbml">
  <body>
    <?php if ($user) { ?>
      Your user profile is
     <pre>
        <?php print htmlspecialchars(print_r($user_profile, true)) ?>
     </pre>
   <?php } else { ?>

  <a href="<?php echo $loginUrl; ?>">Facebook authenticate</a>
    <?php } ?>
   <div id="fb-root"></div>
   <script>
     window.fbAsyncInit = function() {
       FB.init({
        appId: '<?php echo $facebook->getAppID() ?>',
        cookie: true,
        xfbml: true,
        oauth: true,
      status: true
    });
    FB.Event.subscribe('auth.login', function(response) {
      //window.location.reload();
    });
    FB.Event.subscribe('auth.logout', function(response) {
      //window.location.reload();
    });
  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
</script>
   </body>
  </html>

它也在这里http://codepad.org/f0Tuh63v 我做错了什么?

还有一种方法可以在不使用phpsdk或js sdk的情况下获取FB用户ID吗?或者我必须使用这些插件吗?

1 个答案:

答案 0 :(得分:0)

我看不出你的代码有什么问题。但是,如果您使用的是Javascript,我可以告诉您另一种获得身份验证的方法,然后获取您需要的信息。

我在我的按钮后面使用了以下代码,该代码验证了我的Facebook应用程序,然后将用户重定向到我的网站。它对我有用。

<a class="fb-login-button" align="center" target="_blank" href="https://www.facebook.com/dialog/oauth?client_id=CLIENT_ID&response_type=token&scope=PERMISSION_1,PERMISSION_2&redirect_uri=YOUR_WEBSITE"> TEXT </a>

然后我提取了重定向URL中返回的令牌。

var url_t; // Get the redirected URL.
access_token = url_t.split('=')[1].split('&')[0];

然后使用访问令牌发送了HTTP请求以获取所需数据。我使用了facebook提供的GRAPH API。例如:获取用户的名字:

var xhr = new XMLHttpRequest(); 
var f_url_new = "https://graph.facebook.com/fql?q=SELECT%20name%20FROM%20user%20WHERE%20uid%20=%20me()&access_token=" + access_token;
xhr.open("GET", f_url_new , true);
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
        obj1 = JSON.parse(xhr.responseText);
        var str = obj1.data[0].name.toString();
        var n=str.split(" ");
        document.getElementById("name").innerText = n[0];
    }
}
xhr.send();

希望它能让您对替代方案有所了解。这不是您问题的正确答案,但可以帮助您完成思考过程。