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


Facebook access_token not active, upon retry becomes active

我有一个facebook画布应用程序,我正在使用最新版本的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
                )
        )
....

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

所以,在我埋头苦干了一个星期之后…我想明白了!我在第一页的末尾添加了一个脚本来重置滚动条。

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

下一页是处理,直到我到达下一页邀请屏幕出现时才正常工作。那一页是fbi .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>

瞧,它现在工作了。我非常沮丧,这是这个代码破坏的事情,但非常高兴,我现在有它的修复和理解问题是什么!!