我制作了一个简单的应用程序,用于从我的个人网站使用PHP脚本发布到Facebook页面。
经过多次试验和错误,它似乎工作得很好。我可以通过我的网站登录到我的应用程序,发布一些东西,然后它会返回到我的网站。所以一切都很好。
奇怪的是,尽管一切正常,我得到这个错误在我的日志:
oautheexception:验证访问令牌错误:会话无效因为用户退出。
我在谷歌上搜索了这个错误,从我看到的情况来看,大多数人都经历了超时或意外登出。解决方案的范围包括如何维护已登录会话。
然而,我认为我的情况与我见过的其他问题不同,因为尽管有错误,我似乎仍然登录。我可以想发多少次就发多少次。
这个错误似乎不是每次我发布到墙上都产生的。似乎每三到四次就会出现一次,但并不一致,我还没能确定一种模式。
既然一切正常,我可以忽略错误信息,但这对我来说似乎是不好的做法。我可不想以后有什么东西偷偷地来咬我。
任何帮助或建议都将不胜感激。
驱动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');
}
}
}
当您获得access_token时,请求offline_access,然后您的token将不会过期
不访问代码是不可能提供帮助的。但我认为一个应用程序(来自手机,浏览器,…)改变了当前的令牌,试图从你的facebook账户获取更新。在注销这些设备的情况下再次测试。