对于具有所有正确权限的应用程序,无法获取Facebook页面的访问令牌

时间:2011-09-21 22:01:24

标签: facebook open-graph-protocol facebook-apps

SO社区,

我一直试图将应用程序自动发布到我的Facebook页面。

这是我采取的步骤:

A)我授权我的所有Facebook页面申请并使用

授予offline_access,publish_stream和manage_pages权限
https://www.facebook.com/dialog/oauth?client_id=<app_id>&redirect_uri=<url>&scope=read_stream,publish_stream,manage_pages,offline_access,publish_actions

B)我为具有这些权限的应用程序请求了访问令牌

https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=<app_id>&client_secret=<app_secure_key>&scope=manage_pages,offline_access,publish_stream

C)我现在想要获取页面的访问令牌,以便能够使用

完成最后的帖子
https://graph.facebook.com/feed?<page_access_token>&message=test&id=<page_id>&method=post

然而,获取page_access_token是我失败的地方

这是我正在尝试的电话

https://graph.facebook.com/<page_id>?fields=access_token&access_token=<app_access_token>

但不是页面的访问令牌,我只是回来了:

{
   "id": "<page_id>"
}

任何人都有任何见解我缺少的东西。

/托马斯

2 个答案:

答案 0 :(得分:3)

我们在过去的几天里成功地完成了这项工作。这是一个总结。如果我在必要时详细说明它,我会道歉,但你做过的几件事似乎有点不对劲。总结一下你的步骤:

如果您正在执行 step_A 更正,这看起来似乎没有问题,那么在结尾处您将收到一个CODE(而不是最终访问令牌)。这将是使用您在步骤A中发送的重定向网址的重定向,因此请确保您的服务器正在接受对此处指定的 redirectURL 的请求。它将采用http://redirectURL?code=A_CODE_GENERATED_BY_SERVER的形式,因此使用params [code]可以获得代码。

Step_B可能是你稍微偏离的地方。您已将step_A中的 CODE 发送回服务器。我看到您再次设置了scope参数,现在没有必要(在 step_A 中完成)。 Step_B 您的请求网址应如下

https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE

这次Facebook使用redirectURL发回Response 而不是。如果您拥有正确的 Step_B 请求URI,则可以将其粘贴到浏览器位置栏中,响应将在浏览器中呈现。您可以使用 HTTPBuilder (这就是我正在使用的)并捕获此响应正文。它的格式为access_token=<really_big_string>&expires=<time_to_live>。无论你喜欢哪种方式解析这个回应。

这也是一个access_token(我们称之为access_token_uno),我想你可以用这个做一些事情。我自己没有尝试过,所以我们继续 Step_C 。我想你已经知道了你的PageID。您必须使用表单

的URL将access_token_uno发回给Facebook
https://graph.facebook.com/<PageID>?fields=access_token&access_token=<access_token_uno>

响应将是以下形式的JSON块:

{
   "access_token": <required_page_access_token>,
   "id": <PageID>
}

解析JSON块,你就完成了。

要记住的一个小细节:redirectURL必须在 Step_A Step_B 中保持不变,否则事情就会失败。此外,我还没有尝试使用offline_access权限,但即使是这样,我也不认为上述步骤会发生变化。

答案 1 :(得分:0)

您需要为具有该页面管理权限的用户获取https://graph.facebook.com/ {userid} / accounts。在里面你应该找到页面的access_token。

http://developers.facebook.com/docs/authentication/#app-login