我已设法通过 API(C#)向 Facebook 页面发布信息,但当页面管理员注销时,会出现以下错误:
"(OAuthException - #190) 访问令牌验证错误:Session is invalid because the user logged out.";
如何生成永不过期的访问令牌?
我需要一个不打开 Facebook 登录对话框的解决方案。
这是我使用 PHP SDK 生成 "Never" 过期访问令牌的代码:
$facebook = new \Facebook\Facebook([
'app_id' => '{app-id}',
'app_secret' => '{app-secret}',
'default_graph_version' => 'v2.10',
'default_access_token' => '{access-token}'
]);
// Exchange token
$token = $facebook->post('/oauth/access_token',
array(
'grant_type' => 'fb_exchange_token',
'client_id' => 'APP ID',
'client_secret' => 'APP Secret',
'fb_exchange_token' => 'access Token'
)
);
$token = $token->getDecodedBody();
$token = $token['access_token'];
echo $token;
我回传访问令牌,然后使用 access token debugger 进行调试。结果应该是过期:永不失效"。
文档中的参考资料:
1.为粉丝页管理员生成长效令牌 http://appdevresources.blogspot.sg/2012/11/extend-facebook-access-token-make-it.html(附带图片的详细说明) 2.为粉丝页本身生成长效令牌 http://appdevresources.blogspot.sg/2012/11/retrieving-facebook-page-id-and.html 3.使用 2) 中的令牌在粉丝页的墙上发布信息(无需 Facebook 登录对话框) 4.生成的令牌永不过期(即使粉丝页面的管理员已注销)
您可以使用 facebook 提供的以下应用程序将令牌寿命刷新为 60 天,然后在令牌即将过期时,在 60 天内再次调用相同的应用程序,将令牌寿命刷新为 60 天。 令牌过期存在于 expires 参数中,其值以秒为单位
用实际值替换 CLIENT_ID 和 CLIENT_SECRET
https://graph.facebook.com/oauth/access_token?client_id=<CLIENT_ID>
&client_secret=<CLIENT_SECRET>&grant_type=fb_exchange_token
&fb_exchange_token=<ACCESS_TOKEN>
在 ACCESS_TOKEN 中,输入实际的令牌值,而不添加 "access_token=";