Facebook access_token未激活,重试后变为活动状态

时间:2011-11-26 07:29:02

标签: php facebook session oauth access-token

我有一个facebook canvas应用程序,我使用的是最新版本的PHP SDK。

我的工作流程看起来像这样。用户登录Facebook并从他们的应用列表中点击该应用程序。

用户登陆表单页面 - >点击提交 - >用户没有看到它通过表单处理页面并尝试发布到墙 - >标题重定向到邀请页面。

流程有效,因为我内置了透明的错误处理。但是,在第一次流动过程中没有墙柱。通过单击Facebook图标重复进入用户主页,单击用户应用程序列表中的应用程序链接。

用户登陆表单页面 - >点击提交 - >用户没有看到它通过表单处理页面并尝试发布到墙 - >标题重定向到邀请页面。

这一次,每次都有它工作。

我在第一次尝试时收到的错误是会话access_token无效。之后的每一次,只要用户没有注销它就会起作用,我永远不会得到一个坏的令牌。

在墙上代码的表格处理页面上:

$user = null;
require "/usr/home/app/www/fb/facebook.php";

//facebook application
$fbconfig['appid' ]     = "xxx";
$fbconfig['secret']     = "xxx";
$fbconfig['baseUrl']    =   "http://www.app.com/fb";
$fbconfig['appBaseUrl'] =   "http://apps.facebook.com/app";

// Create our Application instance.
$facebook = new Facebook(array(
  'appId'  => $fbconfig['appid'],
  'secret' => $fbconfig['secret'],
));

//session_write_close();
$user = $facebook->getUser();

    try {
        $publishStream = $facebook->api("/me/feed", 'post', array(
            'message' => "mess", 
            'link'    => 'http://apps.facebook.com/app',
            'picture' => 'http://images.app.com/img.jpg',
            'name'    => 'name',
            'description'=> 'des'
          )
        );
    } catch (FacebookApiException $e) {
        d($e);
    }
    header("Location: https://www.app.com/fb/invite.php");

这是截断的确切错误,以省略错误的信息:

FacebookApiException Object
(
    [result:protected] => Array
        (
            [error] => Array
                (
                    [message] => An active access token must be used to query information about the current user.
                    [type] => OAuthException
                )

        )
....

2 个答案:

答案 0 :(得分:0)

也许您可以尝试offline_access权限来获取非终止访问令牌?

答案 1 :(得分:0)

所以,在将我的头撞在墙上一周之后......我想通了! 我在第一页的末尾添加了一个脚本以重置滚动。

<script>
   FB.init({
     appId : 'appid',
     status : true,
     cookie : true,
     xfbml : true, 
   });
</script>

在下一页上是处理,在我到达下一页出现邀请屏幕之前,该工作无法正常工作。在那个页面上是FB.init,

function callAppReq() {
   FB.init({
   appId  : 'appid',
   cookie: true,
   channelUrl : 'https://apps.facebook.com/app',
   oauth : true
});

此页面加载后,每次此应用程序都正常工作。我在挠头,无法弄明白。直到我注意到,“oauth:true”是唯一没有在第一页上调用的事情。所以,在我需要让滚动条消失的那个愚蠢的脚本中,我添加了“:oauth:true”......

<script>
  FB.init({
    appId : 'appid',
    status : true,
    cookie : true,
    xfbml : true,
    oauth : true 
  });
</script>

罗'看哪,它现在有效。我非常沮丧的是,这段代码破坏了一些东西,但非常高兴我现在已经修复并了解问题是什么!!!