1

我正在使用 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;
  }
} 
4

2 回答 2

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>
于 2012-11-11T16:08:06.470 回答
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/

文档中的所有内容都得到了很好的解释。只需为您添加更多代码行。

于 2012-11-11T17:51:47.200 回答