使用Facebook PHP SDK(用于傻瓜)从无头网站发布文章到Facebook

时间:2017-05-02 12:40:48

标签: php facebook facebook-graph-api

我对facebook api感到困惑。 我有一个安装了基于PHP的CMS的网站。当文章发布在我的网站上时,我想在我的Facebook商业页面上创建一个帖子,其中包含一篇返回本文的链接。

现在,澄清一下:这是一个无头网络服务器,它将发布到Facebook。没有Facebook登录,没有Facebook用户 - 只有服务器和Facebook页面。目标是自我驱动。写入/配置一次,它无需任何手动更新令牌或诸如此类的东西。

问题(编辑和反映)

  

如何以编程方式获取授权将帖子发布到我的Facebook页面的访问令牌?

程序I've seen proposed是:

首次通过(以用户身份验证,授予应用权限(弹出对话框),重定向回页面):

GET https://www.facebook.com/v2.9/dialog/oauth?client_id=$APP_ID&redirect_uri=$MY_URL&state=&scope=publish_pages

第二遍(获取应用的访问令牌,重定向回页面):

$CODE = $_REQUEST["code"]; // From facebook redirect process
GET https://graph.facebook.com/v2.9/oauth/access_token?client_id=$APP_ID&client_secret=$APP_SECRET&code=$CODE&redirect_uri=$MY_URL

但这会涉及用户,这是我服务器上没有的东西。 : - (

这是我到目前为止所做的,一步一步

制作应用

  • 我需要create a Facebook AppAdd a New app按钮)。
  • 该应用已在类别Apps for Pages下设置,并指向我的网站网址。
  • App IDApp Secret位于您的应用的Settings下。

获取访问令牌

  • 创建应用后,我转到Facebook Graph Explorer
  • 在图表浏览器的标题栏中,我从Application下拉列表中选择了我新创建的应用。
  • 右下方有一个标签为Access Token的大型文本字段。在右侧的下拉列表中,我从Page access token选择了我的Facebook页面。
  • 在同一下拉列表中,我选择了Request publish_pages,在此时我收到了一个想要让我确认的对话框。
  • 在左侧,有一个“侧边栏” - 文本Node: me和搜索字段。我点击此处,然后再次选择access_token
  • 然后Submit按钮为我提供了一个带有相关访问令牌的JSON字符串。

现在,这是一个短命的令牌(大约一个小时)。但即使是长期存在的令牌也会在某个时刻到期。 目标必须是找到一种在代码实例化时以编程方式请求令牌的方法。

发布到Facebook

以下代码使用短期令牌。

$appId       = 'xxxxxxxxxxxxxxxx';
$appSecret   = 'yyyyyyyyyyyyyyyyyyyyy';
$accessToken = 'TheStringIGotFromGraphExplorer';

$fb = new \Facebook\Facebook([
    'app_id' => $appId,
    'app_secret' => $appSecret,
    'default_graph_version' => 'v2.9'
]);

try {
    // Returns a `Facebook\FacebookResponse` object
    $response = $fb->post('/me/feed', [
        'link'        => $article->getUrl(),
        'message'     => $article->getHeader(),
        'description' => $article->getIngress()
    ], $accessToken);
    $graphNode = $response->getGraphNode();
    $LOG->debug(__FILE__,__LINE__,"Posted with id: " . $graphNode['id']);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
    $LOG->error(__FILE__,__LINE__,"Graph returned an error: " . $e->getMessage());
} catch(Facebook\Exceptions\FacebookSDKException $e) {
    $LOG->error(__FILE__,__LINE__,"Facebook SDK returned an error: " . $e->getMessage());
}

1 个答案:

答案 0 :(得分:0)

问题解决了!!

  1. 转到Graph API Explorer
  2. 根据原始帖子中Getting the access token下的说明创建访问令牌,并具有在页面上发布的权限。
  3. 复制您的访问令牌,并将其粘贴到Access token debugger,然后点击调试。
  4. 在此屏幕的底部,有一个按钮Extend Access token
  5. 此按钮随后提供的令牌是永远不会过期的令牌!将新的永久性令牌插入上面的代码中,世界上的一切都会对你微笑。

    : - D< - 我开心