如何获得新';短命';在不使用api资源管理器的情况下,使用先前使用的权限的facebook访问令牌(服务器


How to get a new 'short lived' facebook access token (serverside) with the previously used permissions while not using the api explorer?

简介


我有一个小小的Facebook粉丝页面,我正在上面发布最新消息。为此,我使用了一个长寿命访问令牌,该令牌每60天过期一次,权限为:"manage_pages"answers"publish_stream"。

经过研究,我没有发现">这就是"的解决方案,所以我创建了一个新的帖子来描述我的问题,同时将我发现的所有内容链接起来作为摘要。它长得有点大哈哈(我很抱歉(。

为了获得短期访问令牌,我通常按照这里描述的步骤进行操作。

  • 转到https://developers.facebook.com/tools/explorer/然后从左侧的第一个下拉菜单中选择您的应用程序
  • 单击"获取访问令牌"按钮,在"选择权限"窗口中,单击"扩展权限"并选中manage_pages和publish_stream,然后单击"获取接入令牌"蓝色按钮
  • 在这一步中,您可能会被要求获得应用程序访问Facebook帐户的权限,接受
  • 接下来,单击"GET"下拉列表旁边的文本字段末尾,并替换:me/accounts的数字,然后单击此文本字段旁边的蓝色按钮
  • 您将获得所有页面的令牌,包括您的应用程序页面。在列表中查找您的页面名称,会显示如下:"name":"your page name">
  • 当你找到你的页面时,复制页面的访问令牌(会很长(,看起来像这样:"access_token":"XXXXXXXX">。同时复制页面的id:"id":"XXXXX">

使用

https://graph.facebook.com/oauth/access_token?
    client_id=[clientid]
    &client_secret=[clientsecret]
    &grant_type=fb_exchange_token
    &fb_exchange_token=[shortlivedaccesstoken]

例如,无论是在浏览器中还是通过curl请求,我都会返回我的60天访问令牌。(来源(

如Facebook API文档所述,长期访问令牌无法刷新。当然,我可以使用上面的端点刷新令牌,并返回一个具有相同到期日的新的长期令牌

编辑:为了在粉丝页面墙上创建一个帖子(作为页面用户(,我正在做这样的事情:

$this->fb = new Facebook(array(
    'appId' => [app-id],
    'secret' => [app-secret]
));
//~Get data from DB here~
//~some error handling in case data fetching failed~

$fbToken = '';
$fbToken = *[facebook access token]*;
$mediaData = array(
    'picture' => [picture-url],
    'message' => [message],
    'link' => [link],
    'name' => [name],
    'description' => [description],
    'access_token' => $fbToken
);
try {
    $post_id = $this->fb->api('/' . [fb-page-id] . '/feed', 'post', $mediaData);
} catch(FacebookApiException $e) {
    //log file output
}



问题


您只能通过使用短期访问令牌来获得新的长期访问令牌
@马克西姆·安尼斯科夫描述了一种在这里获得新的短期访问令牌的方法。遇到同样的问题,它在第一次提取时工作一次。接受的答案涉及删除当前权限

此外,在这篇文章中,评论中暗示,如果没有用户交互,即使是短暂的访问令牌也无法刷新

最后,正如你所看到的,这里也有很多人遇到了同样的乐趣

我甚至在某个地方读到,现有的长期访问令牌可以刷新,但前提是它即将过期。没有关于"即将到期"的时间段的信息。(5天不是(

最终,他们都没有再帮助我。


问题


作为上述内容的总结~

如何使用查询API端点的先前使用权限(manage_pagespublish_stream(获取新的短期访问令牌?

这真的只有通过撤销之前给定的访问权限才能实现吗?我试图刷新其访问令牌的网站是关于发布实时更新的,所以我希望几乎没有停机时间。。与其每次旧令牌过期或即将过期时都在图形api资源管理器中手动生成新的短期令牌,我宁愿只按一个按钮即可。


实际上,您对流很困惑!让我来解释一下这个访问令牌的工作原理-

首先,从Graph API资源管理器获取访问令牌只是一种方式,当然不是最好的方式。(但在你的情况下,这似乎很好,因为我认为你只是从你的账户管理页面,而不是为其他脸书用户管理页面——如果我错了,请纠正我(。

通常,脸书集成用于获取脸书用户的访问权限,并执行一些活动或获取用户的数据,这是通过实现脸书登录来完成的。facebook登录将考虑用户授予的权限,并返回访问令牌-这是用户访问令牌BK_HR>现在,如果您想代表页面本身在上发布,则必须使用页面的访问令牌(API-/me/accounts(。现在,好的事情是-您可以扩展never过期的页面访问令牌!我已经在这里解释了步骤。

如果你想代表用户/admin在上发帖,你可以使用用户访问令牌,可以通过发出你已经解释过的''GET请求来扩展该令牌。现在,当你说-

我甚至读到,现有的长期访问令牌可以刷新,但前提是它即将过期。没有关于"即将到期"的时间段的信息。(5天不是(

这句话不正确!您可以在任何时候扩展令牌。今天你有一个60天到期的代币,明天它可以再次延期,最多60天到期。要刷新扩展令牌,您必须重复第一次生成扩展令牌时使用的步骤,即-通过登录流或图形api资源管理器获取访问令牌(正常的访问令牌((是-没有其他方法可以获取访问令牌(,并发出''get请求以获取扩展令牌。就是这样!

你问-

如何使用先前使用的权限(manage_pages和publish_stream(查询API端点来获取新的短期访问令牌?

不用担心,下次当你尝试获取访问令牌时,它将拥有访问令牌的权限,因为你已经授权了该应用程序。你不需要为这件事照顾任何事情!

编辑

如果您不想使用Graph API资源管理器,您可以使用JS/PHP/其他语言编写一个小脚本,并实现facebook登录-获取访问令牌-并扩展该令牌(哦,等等!您没有告诉您是如何创建帖子的?您只可以使用脚本来实现这一点-足够简单!(。祝你好运