Facebook验证访问令牌错误:会话已在unix时间过期


Facebook Error validating access token: Session has expired at unix time

我已经整合了我的网站谁已经链接他们的FB帐户与那里的用户详细信息的用户的离线墙张贴。我在我的数据库中存储了FB-id, FB-Access令牌,并通过使用PHP-SDK库,我在网站上集成了feed墙帖子。一切都工作得很好,所有的用户都得到了facebook墙上的消息。但今天所有的事情都是徒劳的,因为它抛出了各种各样的错误。我一直在寻找更多的文件,但无法找到这个问题的确切相关解决方案。

我用于FB-Wall张贴的代码行

             $usid=$pageinfo['user']['id_facebook'];
    $accestoken=$pageinfo['user']["facebook_accesstoken"];
        if($pageinfo['user']['user_fbtoken']=='1')
         $attachment =  array(
        'access_token' => $accestoken,
        'message' => "myTaste || real restaurant reviews, share your taste on myTaste",
        'name' => "My Favorite Restaurant is ".$business['name'].$business['location']['city']."-What is yours? ",
        'link' => $business['personal_url'],
        'description' => "", 
        'picture'=> "http://googima.com/images/mysite.gif"
        );  
        $facebook->api("/".$usid."/feed", "post",$attachment); 
    }

错误消息:

 Uncaught OAuthException: Error validating access token: Session has expired at unix time
 Uncaught OAuthException: (#210) User not visible thrown in /hsphere/local/home/mysite.com/include/3rdparty/facebook-php-sdk/src/facebook.php

这样做的主要思想是用户不会要求FB登录每次在网站上做一些评论。它需要通过使用我们存储在用户表中的FB详细信息来自动发布。

一旦授予publish_stream权限,则不再需要access_token。因此,删除它并使用这样的东西即使没有有效的会话(只是一个例子)也可以工作:

$params =  array(
    'message' => "Test Message",
    'picture'=> "http://path/to/image.jpg"
);  
$post_id = $facebook->api("/$uid/feed", "post",$params);

有关更多信息,请参阅此回答(编辑4)。顺便说一句,感谢@zerkms提供的信息!

访问令牌在facebook oauth实现中不是永久的。您需要在工作会话开始时更新它

更多详细信息请访问:http://developers.facebook.com/docs/authentication/