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

问题描述:

我有一个Facebook画布应用程序,我使用的是最新版本的PHP SDK。Facebook access_token未激活,重试变为活动状态

我有一个看起来像这样的工作流程。用户登录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 
       ) 

     ) 
.... 

因此,在撞击墙壁一周后,我想到了! 我在第一页末尾添加了一个脚本来重置滚动条。

<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的:真正的” ...

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

罗”你看,现在它工作。我非常沮丧,这是这个代码打破了事情,但非常高兴,我现在已经修复并了解问题是什么!

也许你可以试试offline_access获取非终止访问令牌的权限?

+0

我真的不想要另一个权限只是为了让publish_stream权限正常工作。不过,谢谢你的回应。 –