0

我制作了一个简单的应用程序,目的是使用我个人网站上的 PHP 脚本发布到 Facebook 页面。

经过多次试验和错误,它似乎工作得很好。我可以通过我的网站登录我的应用程序,发布一些内容,然后它会返回到我的网站。所以一切都很好。

一个奇怪的是,尽管一切正常,但我的日志中出现了这个错误:

OAuthException:验证访问令牌时出错:会话无效,因为用户已注销。

我用谷歌搜索了这个错误,据我所知,大多数人都遇到超时或意外注销。解决方案范围包括如何维护登录会话。

但是,我认为我的案例与我看到的其他问题不同,因为尽管出现错误,我似乎仍然保持登录状态。我可以根据需要多次发布到我的页面墙上。

每次我发布到墙上时似乎都不会产生错误。它似乎每三或四个就会出现一个,但它并不一致,我一直无法确定一种模式。

由于一切正常,我可以忽略错误消息,但这在我看来是不好的做法。我不想以后有什么东西偷偷来咬我。

任何帮助或建议将不胜感激。


驱动 Facebook 交互的代码与我的 CMS 集成在一起,因此它的某些部分散布在各处,和/或可能因为我必须自定义的部分而变得晦涩难懂。但是,我相信这个函数具有 PHP 交互的精髓。请让我知道这是否足以帮助确定问题的根源:

private function executeFacebookPost()
{
    // Facebook posts are limited to 420 characters. Links and pictures
    // are separate.
    $bodyOption = $this->mention->getOption(Action::$BODY);
    if (count($bodyOption) == 0)
    {
        $fbPost = '';
    }
    else
    {
        $fbPost = $bodyOption[1];
    }

    $linkOption = $this->mention->getOption(Action::$LINK_TO);
    if (count($linkOption) == 0)
    {
        $link = '';
    }
    else
    {
        $link = $linkOption[1];
    }
    // Use require_once() and not require() because you might be doing
    // some facebook action elsewhere, and this script will die a sad
    // death if it's asked to require more than once.
    require_once('+facebook/facebook.php');

    // Create our Application instance
    $facebook = new Facebook(array(
                'appId' => Site::getFacebookAppID(),
                'secret' => Site::getFacebookSecret(),
            ));
    $fbUser = $facebook->getUser();
    if ($fbUser)
    {
        try
        {
            $page_id = Site::getFacebookPage();
            $page_info = $facebook->api("/$page_id?fields=access_token");
            if (!empty($page_info['access_token']))
            {
                $args = array(
                    'access_token' => $page_info['access_token'],
                    'message' => $fbPost,
                    'link' => $link,
                        //'description' => "aaaaaaaasdfsfsdf",
                        //'picture' => "http://cdn1.kingdomsofcamelot.com/fb/e2/src/img/fte/army_troop.png",
                );
                $post_id = $facebook->api("/$page_id/feed", "post", $args);
            }
        }
        catch (FacebookApiException $e)
        {
            error_log($e, 1, 'ebisudave@gmail.com');
        }
    }
}
4

2 回答 2

5

当您获得 access_token 时,请求 offline_access,然后您的令牌将不会过期。

于 2011-11-01T23:24:51.240 回答
3

不访问代码就不可能提供帮助。但我认为一个应用程序(来自手机、浏览器等)更改了当前令牌,试图从您的 Facebook 帐户获取更新。注销此设备再次对其进行测试。

于 2011-10-30T10:00:06.557 回答