我制作了一个试图创建永不过期的页面访问令牌的Web应用程序。这样做是因为它全部用PHP编写,需要访问数据而不要求用户重复登录。
Facebook文档说:
要获得更长寿命的页面访问令牌,请将用户访问令牌交换为长期访问令牌,如上所述,然后请求页面访问令牌。生成的页面访问令牌将没有任何到期时间。
所以我写了以下PHP:
// get our current access token
$accessToken = $session->getAccessToken();
// make it a long-lived access token
$longLivedAccessToken = $accessToken->extend();
// find the list of pages we have access to
$request = new FacebookRequest($session, "GET", "/me/accounts?fields=name,access_token,perms");
$response = $request->execute()->getGraphObject()->asArray();
// get the first page access token
$pageAccessToken = $response["data"][0]->access_token;
这似乎有效:访问令牌调试器表示令牌永不过期且现在有效。我甚至可以使用这个令牌做很多事情。
但我的令牌不能做某些事情,我不知道为什么。
我遇到问题的方法是阅读/insights/page_fans_country/lifetime
终点。
如果我使用/mypage/insights/page_fans_country/lifetime
,我会收到回复。也就是说,mypage
是用于生成永久访问令牌的页面。
如果我使用/otherpage/insights/page_fans_country/lifetime
,我就没有数据。
据我所知,这是公共数据 - 如果我在Graph API资源管理器中生成新的访问令牌,我会获得两个请求的有效数据。
所以:
1)我是否正确请求永久页面令牌?
2)这只是(永久)页面令牌的限制 - 他们无法访问某些公共数据吗?
3)如果是这样,是否有正确的方法使用未过期的令牌访问此数据?