2012-06-06 104 views
2

我用下面的PHP代码发布从我的数据库随机邮件到我的Facebook粉丝页面:Facebook的图形API会话过期

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:我也看了会议到期的相关问题,但他们没有一个帮助我。

在此先感谢。

+0

的Facebook已经贬值了访问令牌。检查了这一点https://developers.facebook.com/roadmap/offline-access-removal/ –

+1

@ RaquibulIslam,Facebook **不D **不赞成'access_token'但'offline_access'权限(用于获得“永久性”'access_token') –

+0

@JuicyScripter你是对的,我错过键入那个:( –

回答

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/

+0

谢谢你的回复,但我确定使用页面的访问令牌,因为会话将过期,问题是我必须获得新的访问令牌,然后才能发送消息到页面。但我不知道如何获得:( – user1272724

+0

if它已过期,您将不得不以用户身份重新进行身份验证并检索新的访问令牌。 –

+0

所以我的问题是我如何作为用户重新认证并在我的代码中检索新的访问令牌。因为每个会话(访问令牌)的生命是2小时 – user1272724