Facebook Graph API会话到期

时间:2012-06-06 23:34:34

标签: php facebook session facebook-graph-api

我使用以下PHP代码将随机消息从我的数据库发布到我的Facebook粉丝页面:

require_once('src/facebook.php');
$appid = 'MY_APP_ID';
$appsecret = 'APP_SECRET';
$pageid = 'MY_PAGE_ID';
$token = 'MY_ACCESS_TOKEN';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => $appid,
  'secret' => $appsecret,
));

$message = 'Hello World';

//Information that makes up the facebook page post
$attachment = array(
        'access_token' => $token,
        'message' => $message
);

//Try to post to the facebook page
try{
$res = $facebook->api('/'.$pageid.'/feed','POST',$attachment);

} catch (Exception $e){

    echo $e->getMessage();
}

这里是src/facebook.php - https://github.com/facebook/facebook-php-sdk/blob/master/src/facebook.php

但它返回的错误信息如下:

Error validating access token: Session has expired at unix time 1339020000. The current unix time is 1339022625.

所以我的问题是我的代码应该做些什么改变?

P.S:我也看过有关会话到期的相关问题,但没有人帮助过我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我假设您使用的是用户访问令牌,而不是此情况下的页面访问令牌。

您应该使用manage_pages权限对应用程序进行身份验证,这将允许您访问检索页面的访问权限令牌。这些期限有较长的期限。

授权此权限并检索当前用户的有效访问令牌后,您应该向以下端点发出请求,以检索您管理的页面和应用程序列表:

https://graph.facebook.com/me/accounts?access_token=USER_ACCESS_TOKEN

在此响应中包含这些页面和应用程序的访问令牌:

{
  "data": [
    {
      "name": "PAGE_TITLE", 
      "access_token": "PAGE_ACCESS_TOKEN", 
      "category": "PAGE_CATEGORY", 
      "id": "PAGE_ID"
    }, 

您可以在此处查看有关此内容的更多信息:

https://developers.facebook.com/docs/authentication/pages/

<强>更新

对于过期的访问令牌,您需要通过浏览器访问您的应用并遵循身份验证流程来重新验证您的用户。

有关如何处理此问题的文档如下: http://developers.facebook.com/docs/authentication/access-token-expiration/

然后,您可以请求仍然过期的长期访问令牌。您可以在方案4下查看有关如何请求其中一个的信息: http://developers.facebook.com/roadmap/offline-access-removal/