2012-07-21 91 views
0

为了解决a question on Stack Exchange Web Applications中详细描述的问题,我编写了一个PHP脚本,该脚本给出了一个页面名称,并且正确的access_token将该页面创建的事件作为iCal日历文件进行分析。很明显,这个文件不应该被人类访问,而是例如用于订阅的Google日历。用于简单信息检索的Facebook Graph API身份验证

我通过Facebook Graph Explorer创建了access_token,后来才意识到它已过期。所以问题是:我可以得到一个不会过期的页面access_token吗?如果没有,我可以得到一个很长的到期期限吗?

如果这是不可能的 - 有没有人有线索该怎么办?手动提供access_token一小时一次并不觉得可行。

+0

首先获取长时间的用户访问令牌(请参阅https://developers.facebook.com/roadmap/offline-access-removal/)。如果您使用该令牌获取您的页面访问令牌,则默认情况下后者不会过期。 – CBroe 2012-07-21 10:02:18

+0

谢谢@CBroe!这个提示让我走上了正确的轨道。我已经详细解答了答案,请参阅下文。 – 2012-07-21 19:43:16

回答

1

@CBroe让我走上正轨,@ MPaulo帮助我进一步。下面是我在创建的脚本文件的开始部分解释过程,以解决上述问题开始时链接到的问题中描述的问题。


首先,您需要一个访问令牌。这是一件复杂的事情 - 定期做一件很容易,但我们希望永久持续。如方案5描述如下:https://developers.facebook.com/roadmap/offline-access-removal/,我们需要:

  1. 获取定期短暂的访问令牌
  2. 换取一个长期的访问令牌
  3. 使用我们新的访问令牌,得到永久页面访问令牌。

首先,创建一个新的Facebook应用程序https://developers.facebook.com/apps/。它可以任意命名,它不会被真正使用。填写一个域 - 无论哪一个,只显示一个显示简单HTML并且不执行任何重定向的内容:我使用自己的静态网页http://jobjorn.se/,但http://example.org/也可以工作。

由于对堆栈溢出这里指示由MPaulo:https://stackoverflow.com/a/11238327/564628,使用应用程序ID - 由新创建的应用程序 - 并且访问此页: https://www.facebook.com/dialog/oauth?client_id=MY_APP_ID&redirect_uri=MY_SITE_URL&scope=manage_pages&response_type=token 一定要取代“MY_APP_ID”和“MY_SITE_URL”。

然后,请访问此页面换取长期访问令牌的短暂访问令牌: https://graph.facebook.com/oauth/access_token?client_id=MY_APP_ID&client_secret=MY_APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=YOUR_ACCESS_TOKEN 一定要取代“MY_APP_ID”,“MY_APP_SECRET”和“YOUR_ACCESS_TOKEN”(最后被访问令牌你从第一页开始接收)

最后,让你的页面访问令牌这里: https://graph.facebook.com/me/accounts?access_token=YOUR_NEW_ACCESS_TOKEN 一定要取代“YOUR_NEW_ACCESS_TOKEN”(访问令牌,你从第二页收到)

粘贴在下面。它应该是永久的,但由于错误可能只会持续两个月 - 详情请参阅https://developers.facebook.com/bugs/151056591697025。它似乎已经修复。您可以在此处进行测试:https://developers.facebook.com/tools/debug/access_token

0

创建一个应用程序并使用该应用程序的凭据进行身份验证。只要您没有阅读用户特定的数据,就不需要用户access_token。

+0

我正在阅读用户特定的数据 - 要通过API访问页面的事件,您必须成为页面的管理员。 – 2012-07-21 19:37:32