使用PHP作为页面管理员发布到Facebook页面

使用PHP作为页面管理员发布到Facebook页面,php,facebook,facebook-graph-api,Php,Facebook,Facebook Graph Api,首先,我知道有一百万个类似的问题,但它们要么已经过时(Facebook已经改变,说明也不再有效),要么没有解释如何具体执行我的要求 我正在尝试在Facebook上注册一个应用程序,这样我就可以自动发布到公司的Facebook页面,我是该页面的管理员 我正试图通过PHP实现这一点,我有相当丰富的经验(PHP,而不是Facebook API) 到目前为止,我已经注册为Facebook开发者,制作了一个Facebook应用程序,获得了appID和secret word,并从Github下载了Faceb

首先,我知道有一百万个类似的问题,但它们要么已经过时(Facebook已经改变,说明也不再有效),要么没有解释如何具体执行我的要求

我正在尝试在Facebook上注册一个应用程序,这样我就可以自动发布到公司的Facebook页面,我是该页面的管理员

我正试图通过PHP实现这一点,我有相当丰富的经验(PHP,而不是Facebook API)

到目前为止,我已经注册为Facebook开发者,制作了一个Facebook应用程序,获得了appID和secret word,并从Github下载了Facebook php sdk。我曾尝试学习一些教程,但Facebook开发者/应用程序页面都已更改,因此说明现在无效

我想做的就是能够通过PHP从服务器自动发布到我的页面的墙上,就像我以页面管理员的身份发布状态更新一样。我不明白这是怎么或为什么如此困难

Facebook应用程序页面上有一百万个我从未听说过的设置,而且似乎没有关联,那么就没有任何信息可以指导我做我想做的事情

这是我所能到达的最远的地方,我碰到了一堵墙。不知道下一步该怎么办。Facebook一直问我“选择你的应用程序如何与Facebook集成”,但他们的选项似乎没有包括我想要的内容,这只是在我自己的页面上发布。我似乎还不能实际使用该应用程序,因为它需要各种设置,比如“Canvas URL”,我不理解,等等。然后我显然需要设置权限,但我也看不出有什么办法可以做到这一点

我该怎么办?

设置应用程序 您将需要验证在您的页面上至少具有内容创建者权限的用户。因此,您需要选择“使用Facebook登录的网站”并输入您的网站url。 您还必须输入域(没有协议的网站url) 在测试时将其保持在沙箱模式,以后可以编辑它

您实际上不必担心其他设置,因为询问权限可以直接添加到php代码中

“在线”访问 要直接登录并发布到facebook,您需要检索访问令牌

获取访问令牌 下面是一个基本情况:

  • 让用户登录并允许具有适当权限的应用程序(管理页面、发布流)(如果他没有)
  • 检索用户访问令牌
  • 使用用户访问令牌查询/me/帐户以获取页面id和访问令牌
然后,您所要做的就是使用id和访问令牌进行API调用,以便在facebook上发布

“脱机”访问 为了在不需要登录的情况下发布(如果您不是唯一一个发布者,那么这很有用),您需要一个永久的扩展令牌。因此,您基本上应该有一个单独的脚本,您将运行一次以检索扩展令牌并存储它

获取扩展访问令牌 为了能够在用户未登录的情况下发布,您的页面需要一个永久访问令牌

下面是一个基本情况:

  • 让用户允许具有适当权限的应用程序(管理页面、发布流)
  • 检索用户访问令牌
  • 将用户访问令牌更改为扩展用户访问令牌
下面是我执行此步骤的方法(您也可以使用curl)

然后

  • 使用用户扩展访问令牌查询/me/帐户以获取页面
  • 更改扩展访问令牌的页面访问令牌(代码与 (上图)
(根据文档,最后一步应该是不必要的,因为当您使用扩展用户令牌查询/me/帐户时,您应该获得一个扩展页面令牌,但在我的情况下,它不起作用)

并且,您将获得一个永久访问令牌,该令牌只有在用户更改密码或不允许应用时才会过期。你所要做的就是将它与页面id一起存储,然后在需要API调用发布到facebook的任何地方检索它


PHPSDK有很好的文档记录,所以您不应该遇到任何谷歌搜索无法解决的问题。查找2012年9月后的线程,因为php sdk也没有太大变化,所以流程没有发生变化。

您想要获取页面访问令牌,看看是否还有其他不清楚的内容,例如如何获取令牌等–然后您将不得不阅读更多的文档。
$token_url = "https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUT_APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=OLD_TOKEN";
$accessToken = @file_get_contents($token_url);