Facebook应用程序获取用户的名称不起作用

时间:2012-11-11 14:37:54

标签: php facebook

我正在使用PHP SDK 3.2.0创建一个Facebook应用程序,我遇到了一个问题。当我正在进行API调用时,尝试获取用户的名称没有任何问题。我正在使用github.com上的示例,但仍然无法实现我正在寻找的东西。

require 'src/facebook.php';

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

// 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;
  }
} 

2 个答案:

答案 0 :(得分:1)

好吧,如果您有活动的访问令牌,则需要先验证。如果没有,你应该显示Facebook登录按钮。

<?php
$userId = $facebook -> getUser();

 if ($userId) { 
  $userInfo = $facebook->api('/' . $userId); ?>
  Welcome <?= $userInfo['name'] ?>
<?php } else { ?>
<div class="fb-login-button" data-show-faces="true" data-width="200" data-max-rows="1"></div>   
<?php } ?>

根据你的代码,它应该是这样的:

<?php
require 'src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'xxx',
  'secret' => 'xxx',
));
?>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'xxx', // App ID
      channelUrl : 'http://YOURDOMAIN.com/channel.php', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });
    FB.Event.subscribe('auth.login', function(response) {
      window.location.reload();
      //alert(me.name);
    });
    }
</script>


<?php
$userId = $facebook -> getUser();

if ($userId) { 
  $userInfo = $facebook->api('/' . $userId); ?>
  Welcome <?= $userInfo['name'] ?>
<?php } else { ?>
<div class="fb-login-button" data-show-faces="true" data-width="200" data-max-rows="1"></div>   
<?php } ?>

    <script>
        // Load the SDK Asynchronously
        ( function(d) {
                var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
                if (d.getElementById(id)) {
                    return;
                }
                js = d.createElement('script');
                js.id = id;
                js.async = true;
                js.src = "//connect.facebook.net/en_US/all.js";
                ref.parentNode.insertBefore(js, ref);
            }(document));
    </script>

您的服务器中应该有一个channel.php文件,该文件包含以下内容:

<?php
$cache_expire = 60*60*24*365;
header("Pragma: public");
header("Cache-Control: max-age=".$cache_expire);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');
?>
<script src="//connect.facebook.net/en_US/all.js"></script>

答案 1 :(得分:1)

经过身份验证的推介已弃用,将于2013年2月删除。

话虽如此,我建议使用FB.login进行用户登录:

  

https://developers.facebook.com/docs/reference/javascript/FB.login/

如果您不想使用Javascript SDK,PHP SDK还有一种更简单的方法:

  

https://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/

文档中的所有内容都得到了很好的解释。为您提供更多代码。