我已经阅读了与此主题相关的堆栈上的每个帖子,但似乎没有任何效果。
我在fb开发者页面上使用了获取访问令牌按钮的图表浏览器,(确保选择所需的参数 - user_likes,publish_actions,email,offline_access,publish_stream,manage_pages)然后用它来创建一个具有以下链接的长期访问令牌:插入/替换
<MYAPPID>,<MYSECRETID>,<SHORT_TERM_TOKEN>
真实的东西:
https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=<MYAPPID>&client_secret=<MYSECRETID>&fb_exchange_token=<SHORT_TERM_TOKEN>
得到我的<TWO_MONTH_TOKEN>
现在尝试实现代码:
require "fb_src/facebook.php";
$config = array('appId' => '<MYAPPID>','secret' => '<MYSECRETID>');
$params = array('scope'=>'user_likes,publish_actions,email,offline_access,publish_stream,manage_pages');
$facebook = new Facebook($config);
$user = $facebook->getUser();
if($facebook->getUser()) {
try {
$user_profile = $facebook->api('/me');
$access_token = $facebook->getAccessToken();
} catch(FacebookApiException $e) {
$login_url = $facebook->getLoginUrl($params);
error_log($e->getType());
error_log($e->getMessage());
}
} else {
$login_url = $facebook->getLoginUrl($params);
}
$page_id = "<MY_FANPAGE_ID>";
$page_access_token = "";
$result = $facebook->api("/me/accounts");
foreach($result["data"] as $page) {
if($page["id"] == $page_id) {
$page_access_token = $page["access_token"];
//echo '<br>';
//echo "2. ".$page_access_token;
break;
}
}
$args = array(
'access_token' => '<TWO_MONTH_TOKEN>',
'message' => "my short message",
'name' => "name of post",
'link' => "http://example.com/",
'picture' => "http://example.com/images/fbobimgSV403.jpg",
'actions' => array(
'name' => 'page name',
'link' => "http://example.com/page_name"
)
);
$post = $facebook->api("/$page_id/feed","post",$args);
真正让我感到震惊的是,这个确切的代码在今天凌晨2点工作了大约20次,同时测试了它。然后它在我退出时停止,看看我是否可以在没有登录的情况下让它工作。我再次登录并重复这个过程无济于事。访问令牌仍然有效期为2个月。 (是的,我已经尝试清除缓存并删除cookie。)
我收到此错误:
Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. thrown in /public_html/facebook/fb_src/base_facebook.php on line 1249
我也应该指出$user = $facebook->getUser();
每次都会返回0。
我希望有人成功地做到了这一点,并且可以引导我朝着正确的方向前进。谢谢!