Php Facebook:在页面的墙上自动发布

Php Facebook:在页面的墙上自动发布,php,facebook,facebook-graph-api,oauth,access-token,Php,Facebook,Facebook Graph Api,Oauth,Access Token,这是一个让我疯狂了好几个星期的问题 一年多以来,我一直在我的两个facebook页面上自动发布我的网站文章,直接在墙上(主流?)。它就像一个符咒。 然而,自3月份以来,这些出版物已经转移到出版物->访客出版物(很抱歉翻译,但我的FB是法语的),所以它们几乎看不见 你知道FB关于页面发布的政策是否有变化吗?我知道我使用的是旧的PHPSDK(3.1.1),但我无法更新,因为我的服务器没有PHP5.6!但是我认为如果是SDK版本的问题,那么发布就不可能了 从技术上讲,我的Web服务器上的cron任务使

这是一个让我疯狂了好几个星期的问题

一年多以来,我一直在我的两个facebook页面上自动发布我的网站文章,直接在墙上(主流?)。它就像一个符咒。 然而,自3月份以来,这些出版物已经转移到出版物->访客出版物(很抱歉翻译,但我的FB是法语的),所以它们几乎看不见

你知道FB关于页面发布的政策是否有变化吗?我知道我使用的是旧的PHPSDK(3.1.1),但我无法更新,因为我的服务器没有PHP5.6!但是我认为如果是SDK版本的问题,那么发布就不可能了

从技术上讲,我的Web服务器上的cron任务使用我的FB应用id和密码发送请求,并使用我的个人访问令牌进行发布。由于我是具有“管理页面、发布操作”权限的页面管理员,所以没有问题。 我读过一些关于“发布页面”的话题,但要使用它,你需要将你的应用提交给FB进行验证

FB支持有一个页面,解释用户和页面访问令牌之间的差异。但目前还不清楚:

我还尝试获取其中一个页面的访问令牌,但当我尝试使用它时,我得到了“(#200)用户尚未授权应用程序执行此操作”

这是我的密码:

require_once dirname(uu DIR_u)。'/include/facebook/facebook.php'//facebook SDK
$this->oFB=新Facebook(数组)(
'appId'=>self::FACEBOOK\u应用程序\u ID,
'secret'=>self::FACEBOOK_secret'cookie'=>true));
//然后
$this->oFB->api('/{MyPageId}/feed','post',$this->FB_参数);
//使用FB_参数填充:
$FB_params=array('access_token'=>self::FACEBOOK_access_token_PERSO,
'from'=>self::FACEBOOK\u APP\u ID);
//... 还有。。。。
$FB_params['to']=$FB::FACEBOOK_MY_PAGEID;
$FB_params['message']=“blabla…”;
$FB_params['link']=“url…”;
/*我获取我的FACEBOOK访问权令牌的方式:
1-命中率:
"https://www.facebook.com/dialog/oauth?client_id=“.FACEBOOK\u APP\u ID.”重定向\u uri(&D)=http://www.website.com/token.php&scope=manage_pages,发布"行动"
2-点击:https://graph.facebook.com/oauth/access_token?client_id=“.FACEBOOK\u APP\u ID.”重定向\u uri(&D)=http://www.website.com/token.php&client_secret=“.FACEBOOK\u SECRET.”&code=“.$\u GET['code']
3-访问令牌->$\u GET['access\u token']

*/
您需要Appid、App secret和访问令牌。请对所有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 { }

希望这是工作

您需要Appid、AppSecret和访问令牌。请对所有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 { }

希望这是有效的

您可能现在使用的是用户令牌而不是页面令牌。调试令牌。是的,您需要发布页面权限,不,您不需要提交应用程序进行审查。luschn:是的,我一直使用用户令牌,它起了作用。但感谢CBroe,我终于明白了!事实上,当您在FB屏幕上解释t您必须请求审阅,请单击右下角的“确定”。它将起作用!但您需要获取页面访问令牌(ATP)对于您要发布的每个页面。存储它们,以便PHP可以在您的脚本想要发布您的最新新闻时使用它们。我唯一不确定的是ATP是否有过期日期?由于您的用户令牌过期,我假设ATP也过期。非常感谢!!!!您现在可能正在使用用户令牌而不是页面tok恩。调试令牌。是的,你需要发布页面权限,不,你不需要提交你的应用进行审查。卢施恩:是的,我一直使用一个用户令牌,它工作正常。但我终于明白了,多亏了CBroe!事实上,当你在FB屏幕上解释你必须要求审查时,点击右下角的“确定”。它将rk!但是您需要为每个要发布的页面获取页面访问令牌(ATP)。存储它们以便PHP可以在您的脚本想要发布最新新闻时使用它们。我唯一不确定的是ATP是否有过期日期?随着您的用户令牌过期,我假设ATP也过期。非常感谢!!!!