【问题标题】:php An active access token must be used to queryphp 必须使用活动访问令牌进行查询
【发布时间】:2014-01-14 16:22:28
【问题描述】:

我正在使用 facebook SDK 来获取 facebook 好友列表。如果我使用 Javascript 调用 API FB.init();它工作得很好..

但是如果我直接使用的话

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

$fbuser = $facebook->getUser();
try{
    $user_profile = $facebook->api('/me');
    print_r($user_profile);
} catch(Exception $e){
    echo $e->getMessage();
}

(用户在同一浏览器中使用 facebook 登录) 它总是给我一个错误:必须使用活动访问令牌来查询有关当前用户的信息。

请帮助我如何在没有 FB.init() 的情况下使用它或在任何地方重定向..

【问题讨论】:

    标签: php facebook


    【解决方案1】:

    使用这个

    facebook = new Facebook(array(
    'appId'  => $appid,
    'secret' => $secret,
    'cookie' => true
    ));
    
    $fbuser = $facebook->getUser();
    if($fbuser){
       $access_token = $facebook->getAccessToken();
       $facebook->setAccessToken($access_token);
       try{
           $user_profile = $facebook->api('/me');
           print_r($user_profile);
       } catch(Exception $e){
          echo $e->getMessage();
       }
    }else{
      // User not logged in generate the login button or link here
    }
    

    确保在用户第一次登录时在上面的脚本中重新加载页面,换句话说你需要提供redirect_uri https://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/

    您也可以使用以下api获取用户详细信息

    $user_profile =  $facebook->api('/'. $fbuser,'GET');
    

    然后在页面下方添加以下内容。这将检查用户是否已经登录,它将重定向到同一页面,换句话说,它不会要求用户再次登录

    <div id="fb-root"></div>
    
    <script type="text/javascript">
        window.fbAsyncInit = function()
                {
                    FB.init
                    ({
                        appId   : 'your fb app id',
                        status  : true, // check login status
                        cookie  : true, // enable cookies to allow the server to access the session
                        xfbml   : true, // parse XFBML
                        oauth   : true
                    });
                    FB.Event.subscribe('auth.login', function()
                    {
                        window.location.reload();
                    });
                };
    
              (function()
              {
                var e = document.createElement('script');
                e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
                e.async = true;
                document.getElementById('fb-root').appendChild(e);
                }());
    </script>
    

    【讨论】:

    • 是的,它有效,但只有几次,第一次给我同样的错误..“访问令牌”,第二次..有效,第三次再次出错..第四次..再次它有效..知道为什么会这样吗?
    • 是的,一旦用户登录,您需要将用户重定向到同一页面,您可以发布您添加的登录脚本吗?或者我们需要标记页面下方的JS代码如果你愿意我可以为你添加?
    • 我已经修改了答案,如果仍有问题,请告诉我。 'cookie' => true 在 api 中给出。
    • 做到了。还没有解决..这是一次。当 FB.init() 重定向..它带有新的访问令牌。但我不想每次都刷新页面。我的目的是显示用户朋友最近在我的网站上进行了购买,尽管我已经使用此代码进行用户登录。
    • 奇怪的尝试使用这个 $user_profile = $facebook->api('/'.$fbuser,'GET');
    猜你喜欢
    • 2012-03-17
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多