【问题标题】:Facebook: auto post on wall of a PageFacebook:在页面的墙上自动发布
【发布时间】:2018-02-16 15:33:05
【问题描述】:

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

一年多以来,我在我的 2 个 facebook 页面上自动发布了我网站上的文章,直接在墙上(主流?)。它就像一个魅力。 但是,从 3 月份开始,这些出版物已经转移到 Publication->Visitor Publication (抱歉翻译,但我的 FB 是法语),所以它们几乎不可见!

您知道关于在页面上发布的 FB 政策是否发生了变化?我知道我使用的是旧的 PHP SDK (3.1.1),但我无法更新,因为我的服务器没有 PHP 5.6 !但是我觉得如果是 SDK 版本问题,那么发布将是根本不可能的......

从技术上讲,我的网络服务器上的一个 cron 任务使用我的 FB 应用程序 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政策的变化吗?

很抱歉这篇冗长的帖子,但我希望您能理解我在网上搜索了很长时间而没有任何解决方案。 谢谢!

【问题讨论】:

  • 您现在可能正在使用用户令牌而不是页面令牌。调试令牌。
  • 是的,您需要 publish_pages 权限,不,您不需要提交您的应用进行审核。 developers.facebook.com/docs/apps/faq#faq_180362122361921
  • luschn :是的,我一直使用用户令牌并且它有效。但感谢CBroe,我终于明白了!事实上,当您有 FB 屏幕说明您必须要求审查时,请单击右下角的 OK。它会起作用的!但是您需要为要发布的每个页面获取页面访问令牌 (ATP)。存储它们以便 PHP 可以在您的脚本想要发布您的最新消息时使用它们。我唯一不确定的是 ATP 有四个到期日吗?随着您的用户令牌过期,我假设 ATP 也过期。非常感谢!!!!

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


【解决方案1】:

您需要 Appid、App 密码和访问令牌。请对所有身份保密

$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 { }

希望成功

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2011-08-11
    • 2012-08-03
    • 1970-01-01
    相关资源
    最近更新 更多