【问题标题】:Facebook access_token not active, upon retry becomes activeFacebook access_token 未激活,重试后变为激活状态
【发布时间】:2012-12-11 21:20:03
【问题描述】:

我有一个 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
                )

        )
....

【问题讨论】:

    标签: php facebook session oauth access-token


    【解决方案1】:

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

    【讨论】:

    • 我真的不希望仅仅为了让 publish_stream 权限正常工作而请求其他权限。不过,感谢您的回复。
    【解决方案2】:

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

    <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>
    

    瞧,它现在可以工作了。我很不高兴这是代码破坏了东西,但很高兴我现在已经修复它并了解问题所在!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-31
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      相关资源
      最近更新 更多