这是一个让我疯狂数周的问题!
一年多以来,我直接在墙上(主流?)在我的2个Facebook页面上自动发布了我的网站文章。它就像一个魅力。 然而,自3月份以来,这些出版物已经转移到出版物 - >访客出版物(对不起翻译,但我的FB是法语)所以它们几乎是看不见的!
你知道FB政策是否有关于页面发布的变化吗?我知道我使用旧的PHP SDK(3.1.1)但由于我的服务器没有PHP 5.6,我无法更新!但是我觉得如果它是SDK版本问题,那么发布将是根本不可能......
从技术上讲,我的网络服务器上的cron任务使用我的FB App id和密码发送请求,并使用我的个人访问令牌进行发布。因为我是具有“manage_pages,publish_actions”权限的页面的管理员,所以没有问题。 我阅读了一些讨论“publish_pages”的主题,但要使用它,您需要将您的应用程序提交给FB进行验证。 https://stackoverflow.com/a/32143270/985357
FB支持有一个页面,解释了用户和页面访问令牌之间的区别。但目前还不清楚: https://developers.facebook.com/docs/facebook-login/access-tokens#pagetokens
我也尝试在https://developers.facebook.com/tools/explorer中获取我的一个页面的访问令牌,但是当我尝试使用它时,我有“(#200)用户没有授权应用程序执行此操作”
这是我的代码:
require_once dirname(__DIR__).'/include/facebook/facebook.php'; //facebook SDK
$this->oFB = new Facebook(array(
'appId' => self::FACEBOOK_APP_ID,
'secret' => self::FACEBOOK_SECRET, 'cookie' => true));
//then
$this->oFB->api('/{MyPageId}/feed', 'post',$this->FB_params);
//with FB_params populate:
$FB_params= array('access_token' => self::FACEBOOK_ACCESS_TOKEN_PERSO,
'from' => self::FACEBOOK_APP_ID) ;
//... and ....
$FB_params['to'] = $FB::FACEBOOK_MY_PAGEID ;
$FB_params['message'] = "blabla....." ;
$FB_params['link'] = "url..." ;
/*the way I use to get my FACEBOOK_ACCESS_TOKEN_PERSO:
1- hit :
"https://www.facebook.com/dialog/oauth?client_id=".FACEBOOK_APP_ID."&redirect_uri=http://www.website.com/token.php&scope=manage_pages,publish_actions"
2- hit : https://graph.facebook.com/oauth/access_token?client_id=".FACEBOOK_APP_ID."&redirect_uri=http://www.website.com/token.php&client_secret=".FACEBOOK_SECRET."&code=".$_GET['code']
3- access token-> $_GET['access_token']
*/
最后一个问题:最初我现在有一个无限制的访问令牌,使用相同的方法,时间限制为2个月。这也是FB政策的变化吗?
对于这个loOOOOong帖子感到抱歉,但我希望你能理解我在没有任何解决方案的情况下长时间搜索网页。 谢谢!
答案 0 :(得分:0)
您需要Appid,App机密和访问令牌。请对所有ID保密
$graphUrl = 'https://graph.facebook.com/oauth/access_token?client_id='.APPID .'&client_secret='.APPSECRET.'&grant_type=fb_exchange_token&fb_exchange_token='.ACCESS_TOKEN;
$accessToken = @file_get_contents($graphUrl);
parse_str($accessToken); //get the access_token param in the string and would be named $access_token
if(!$access_token) $access_token = $accessToken;
如果无法扩展,则只需返回有效期为2小时的访问令牌 为了发布为公司页面,您需要他们的页面ID。
这是我用来完成所有工作的脚本的一部分。它不是codeigniter,但是您将能够看到它的工作原理。
$config = array(
'appId' => APPID,
'secret' => APPSECRET,
);
$facebook = new Facebook($config);
$facebook->setAccessToken(ACCESS_TOKEN);
// Get User ID
$user = $facebook->getUser();
if ($user) {
try {
$page_id = '************'; //
$page_info = $facebook->api("/$page_id?fields=access_token");
if(!empty($page_info['access_token']) ) {
// do your code stuff
}
} catch { }
希望这是工作