2

我使用以下 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.

所以我的问题是我应该在我的代码中做哪些更改?

PS:我还查看了有关会话到期的相关问题,但没有一个对我有帮助。

提前致谢。

4

1 回答 1

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/

于 2012-06-07T14:32:53.157 回答