Facebook:页面墙上的自动帖子

时间:2017-09-07 19:52:23

标签: php facebook facebook-graph-api oauth access-token

这是一个让我疯狂数周的问题!

一年多以来,我直接在墙上(主流?)在我的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帖子感到抱歉,但我希望你能理解我在没有任何解决方案的情况下长时间搜索网页。 谢谢!

1 个答案:

答案 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 { }

希望这是工作