获取Facebook页面访问令牌以自动发布到Facebook页面墙上。

3
需要通过PHP将网站上的故事发布到指定的Facebook页面,但离线访问权限已被弃用,因此基本上需要获取用户访问令牌,以便可以获取页面访问令牌(作为页面发布)。但这些令牌会过期,延长它们需要直接向用户要求在弹出窗口中扩展权限(如果我有错,请纠正我)。
因此,也许有一种方法可以在后台登录,以便说,如果用户访问令牌过期,则为其登录并获取新的访问令牌?或者,也许有一种方法可以获得永久的用户访问令牌,并通过此获得永久的页面访问令牌?
不理解为什么这么难做,特别是如果我拥有要发布到的网站和Facebook页面。
2个回答

6

我刚刚发现如何做到这一点,并在stackoverflow上搜索了相关问题,以便回答它 :)

首先,你需要请求扩展自己的用户访问令牌,而不是请求用户。你需要扩展自己用户的访问令牌。您的用户访问令牌可以在https://developers.facebook.com/tools/accesstoken/下找到,名称为“用户令牌”。

下一步是通过进行此请求来延长此令牌的生命周期:

GET /oauth/access_token?  
  grant_type=fb_exchange_token&           
  client_id={app-id}&
  client_secret={app-secret}&
  fb_exchange_token={short-lived-token}

在developers.facebook.com的应用程序仪表板中,{app-id}{app-secret}是您应用程序的信息,而{short-lived-token}是您刚刚找到的“用户令牌”。

您不必通过php SDK进行此调用,只需像请求页面graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id={app-id}&client_secret={app-secret}&fb_exchange_token={short-lived-token}一样使用浏览器即可(注意:它以access_token={access-token}&expires={seconds}的形式返回值。因此不要复制整个内容)。

现在,当您使用这个扩展的用户令牌获取页面访问令牌时,它将是永久的。使用新令牌进行此API调用(注意:在进行调用之前,您必须授予“manage_pages”权限以进行此调用,并授予“publish_actions”权限以后在页面上发布。最简单的方法是点击https://developers.facebook.com/tools/explorer/上的“获取访问令牌”按钮,您需要授予的权限在“扩展权限”选项卡下面。):

GET /me/accounts

您将获得页面列表及其部分信息以及每个页面的访问令牌。
这些访问令牌不会过期。您可以在https://developers.facebook.com/tools/debug/上进行检查。

这个救了我的一天。非常感谢!你的赏金即将到账。 - dan-lee

0
你需要为你的页面创建一个连接器应用程序,然后获取该应用程序的永久访问令牌。你可以在Facebook文档的作为应用程序进行身份验证页面上查看此过程的详细信息。

使用应用程序访问令牌真的可以发布内容吗?在我看来,这种类型的令牌只能授予检索信息的权限。如果我在调试器中测试应用程序访问令牌,那么只会显示应用程序标识;如果我使用具有适当权限的用户访问令牌进行测试,则还会显示权限。 - banesto
我认为这不会起作用,因为应用程序的access_token没有为帐户连接授予适当的权限。您需要一个用户access_token才能检索页面的access_token。 - TommyBs
@TommyBs 怎么才能不使用重定向来完成呢?我有用户、密码、应用ID和应用密钥 - 我可以使用某个API调用来获取新的用户访问令牌吗? - banesto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接