facebook:永久页面访问令牌?

Vla*_*sec 184 facebook facebook-graph-api facebook-access-token

我正在开发一个将facebook页面作为其数据源之一的项目.它定期从中导入一些数据,不涉及GUI.然后我们使用Web应用程序显示我们已有的数据.

并非所有信息都是公开的.这意味着我必须访问一次数据然后保留它.但是,我不知道这个过程,我还没有找到一个很好的教程.我想我需要一个access_token,如何从用户那里逐步获得它?用户是Facebook页面的管理员,他是否必须在页面中添加一些我们的FB应用程序?

编辑:谢谢@phwd的提示.我做了一个教程,如何获得永久页面访问令牌,即使offline_access不再存在.

编辑:我刚刚发现它的回答:持久的FB访问令牌服务器拉FB页面信息

don*_*nut 621

按照Facebook 扩展页面令牌文档中的说明,我能够获得一个不会过期的页面访问令牌.

我建议使用Graph API Explorer进行所有这些步骤,除非另有说明.

0.创建Facebook应用程序

如果您已有应用,请跳至步骤1.

  1. 转到我的应用程序.
  2. 点击"+添加新应用".
  3. 设置网站应用程序.

您无需更改其权限或任何内容.您只需要一个在完成访问令牌之前不会消失的应用程序.

1.获取用户短命访问令牌

  1. 转到Graph API Explorer.
  2. 选择要获取访问令牌的应用程序(在"应用程序"下拉菜单中,而不是"我的应用程序"菜单).
  3. 单击"获取令牌">"获取用户访问令牌".
  4. 在弹出窗口的"扩展权限"选项卡下,选中"manage_pages".
  5. 单击"获取访问令牌".
  6. 从有权管理目标页面的Facebook帐户授予访问权限.请注意,如果此用户失去访问权限,则最终永不过期的访问令牌可能会停止工作.

"访问令牌"字段中显示的令牌是您的短期访问令牌.

2.生成长期访问令牌

按照Facebook文档中的这些说明,向GET请求

https://graph.facebook.com/v2.10/oauth/access_token?grant_type=fb_exchange_token&client_id= {app_id}&client_secret = {app_secret}&fb_exchange_token = {short_lived_token}

输入您的应用程序的ID和密码以及上一步中生成的短期令牌.

无法使用Graph API Explorer.由于某种原因,它会受到这个请求的困扰.我认为这是因为响应不是JSON,而是查询字符串.由于这是一个GET请求,您只需转到浏览器中的URL即可.

响应应如下所示:

{"access_token":" ABC123 ","token_type":"bearer","expires_in":5183791}

"ABC123"将是您的长期访问令牌.您可以将其放入Access Token Debugger进行验证.在"过期"下,它应该具有类似"2个月"的东西.

3.获取用户ID

使用长期访问令牌,发出GET请求

https://graph.facebook.com/v2.10/me?access_token= {long_lived_access_token}

id字段是您的帐户ID.你需要它用于下一步.

4.获取永久页面访问令牌

发出GET请求

https://graph.facebook.com/v2.10/ {account_id}/accounts?access_token = {long_lived_access_token}

JSON响应应该有一个data字段,在该字段下是用户可以访问的项目数组.找到您想要永久访问令牌的页面的项目.该access_token字段应具有永久访问令牌.复制它并在Access Token Debugger中测试它.在"过期"下,它应该说"从不".

  • Facebook搞砸了,所以它不再起作用了.:-(在上面的步骤1.5之后(单击"获取访问令牌"按钮),以下对话框中会出现一个红色警告,说明"提交以进行登录审核 - 以下某些权限尚未被Facebook批准"以及挂锁文本"这不会让应用程序发布到Facebook"同时出现在下面.所以应该在上面的步骤1.5和1.6之间插入一个新步骤,阅读"使用您的应用程序做了很多繁琐的事情,然后提交它进行审查,然后祈祷并等待.":-(任何人都知道如何解决这个纯粹的测试应用程序? (14认同)
  • 不得不使用这个来获得我的永久访问令牌,因为它说"帐户"不存在,即使对于v2.7:http://ps.facebook.com/v2.7/ {page_id}?fields =&的access_token的access_token = {long_lived_access_token}` (14认同)
  • 我发誓,如果我没有看到这个答案,我仍然会用一个短命的令牌撞到我的头上......糟糕的是,最后一部分不起作用......我得到了`(# 100)尝试访问节点类型(页面)上不存在的字段(帐户)`错误...无法继续执行步骤5 ...仍然,谢谢...... LE:查看@Vlasec提供的答案的最后部分.您可以通过查询/ {pageId}来获取永久访问令牌?fields = access_token&access_token = {long_lived_access_token}以解决问题. (13认同)
  • 对于任何进入最后一步的人,浏览器只返回:`message:"(#100)尝试访问节点类型(页面)上不存在的字段(帐户)",输入:"OAuthException",代码:100`转到FB Access Token Debugger并测试你的long_lived_access_token.几分钟后我一直看到,如果你回去并重新检查long_lived_access_token,那么FB Access令牌调试器将指示该令牌是永久性的(到期:从不) (10认同)
  • 在最后一步中,我得到以下异常{"error":{"message":"语法错误"字符串的预期结束而不是\"?\".\"在字符11:access_toke\u200c\u200bn" ,"类型":"OAuthException","代码":2500,"fbtrace_id":"A8 + gtSaShIO"}}任何人都知道如何解决它???? (5认同)
  • 步骤4是不必要的,您可以使用长期用户访问令牌直接查询`/ me/accounts`. (4认同)
  • 我还没有测试过这个,我希望其他人认可这个有效。请其他人确认它也适合您。 (2认同)
  • @donut我创建了一个测试应用程序,正在获取访问令牌的寿命很长,但是在步骤5中获取页面访问令牌时,图形api返回一个空数组`Array([data] => Array())`。 (2认同)
  • 按照这些步骤操作后,我得到了空的 json 数据。 (2认同)
  • @donut出于某种原因,在第2步结束时,我最终获得了永久页面访问令牌,但这不应该发生,对吧?当我刚刚检查了访问令牌调试器中步骤2返回的access_token时,它显示"Expires:Never",所以假设我没事.不抱怨,但只是好奇...... (2认同)
  • FB v2.5的所有5个步骤都适用于我.非常感谢 (2认同)
  • 步骤5和`(#100)尝试访问节点类型(页面)上不存在的字段(帐户)`:不同的URL为我解决了问题:`https://graph.facebook.com/v2.8/195252237221555/?fields =&的access_token的access_token = {long_lived_access_token}` (2认同)
  • 也许我是愚蠢的,但为什么在facebook开发者文档中没有详细记录? (2认同)
  • @ToyRobotic,我同意,在我找到这个答案之前,我浪费了很多时间.顺便说一句,截至2017年11月仍然可以正常工作.[这一个](/sf/answers/2747384951/)也有帮助. (2认同)
  • 在第4步中,我得到的是空数据数组data [] (2认同)

Rob*_*Rob 82

这是我的解决方案,仅使用Graph API ExplorerAccess Token Debugger:

  1. 图API Explorer:
    • 从右上角的下拉菜单中选择您的应用程序
    • 从下拉列表(访问令牌字段右侧)中选择"获取用户访问令牌"并选择所需的权限
    • 复制用户访问令牌
  2. 访问令牌调试器:
    • 粘贴复制的令牌并按"调试"
    • 按"扩展访问令牌"并复制生成的长期用户访问令牌
  3. 图API Explorer:
    • 将复制的标记粘贴到"访问标记"字段中
    • 使用"PAGE_ID?fields = access_token"发出GET请求
    • 在响应中找到永久页面访问令牌(节点"access_token")
  4. (可选)访问令牌调试器:
    • 粘贴永久令牌并按"调试"
    • "过期"应该是"从不"

(经API API 2.9-2.11,3.0-3.1测试)

  • 按下没有"扩展访问令牌"按钮.也许他们把它拿出来了. (3认同)
  • 我看到了"扩展"按钮 (3认同)
  • 数据访问权限是否过期? (3认同)
  • 什么是“数据访问过期”?尽管令牌显示“过期:永不”,但“数据访问权限将在大约 3 个月后过期”。 (3认同)
  • 在扩展访问令牌(第 2 步)并再次调试后,它应该永远不会过期。您可能只需通过第 3 步和第 4 步。 (2认同)
  • 哦,老兄,你火了!十分感谢!我浪费了太多时间来找到这个选项,因为我无法正确调试应用程序! (2认同)

小智 11

除了Vlasec答案中的建议步骤,您还可以使用:

  • 这不再起作用了.令牌只持续一个小时 (3认同)

dw1*_*dw1 10

我制作了一个PHP脚本,使其更容易.创建一个应用程序.在Graph API Explorer中,选择您的App并获取具有manage_pages和publish_pages权限的用户令牌.在"关于"页面底部找到您的页面ID.填写配置变量并运行脚本.

<?php
$args=[
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
];

echo generate_token($args);

function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/{$userid}/accounts?access_token={$longtoken}")); // get permanent token
    foreach($r->data as $d) if($d->id==$args['pageid']) return $d->access_token;
}
Run Code Online (Sandbox Code Playgroud)


Sid*_*mal 10

另一个PHP答案让生活更轻松.更新了Facebook Graph API 2.9.只需填写并加载即可.

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$userid}?fields=access_token&access_token={$longtoken}")); // get permanent token
    if($r->id==$args['pageid']) $finaltoken=$r->access_token;
    return $finaltoken;
}
?>
Run Code Online (Sandbox Code Playgroud)

附录:(替代)

从图2.9开始,在调试短访问令牌之后,只需单击Access Token Debugger工具底部的Extend Access Token,就可以省去获取长访问令牌的麻烦.有关和的信息,运行下面的PHP获取永久访问令牌.pageidlonglivedtoken

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'longlivedtoken'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
$r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$args['pageid']}?fields=access_token&access_token={$args['longlivedtoken']}"));
return $r->access_token;
}
?>
Run Code Online (Sandbox Code Playgroud)

虽然第二个代码为您省去了很多麻烦,但我建议您运行第一个PHP代码,除非您非常着急,因为它会交叉检查pageid和userid.如果您错误地选择了用户令牌,第二个代码将不会结束.

感谢dw1Rob


krs*_*oni 7

上面的大多数答案现在都没有给出永久令牌,他们只将其延长到 2 个月。我是这样得到的:

  1. Graph Explorer 工具中,选择相关权限并获取短期页面访问令牌。
  2. 转到调试器工具并粘贴您的访问令牌。然后,单击页面底部的“扩展令牌”按钮。
  3. 复制扩展令牌并在此 API 中使用它:
  4. https://graph.facebook.com/v2.10/me?fields=access_token&access_token= <扩展_access_token>
  5. 这应该会返回给您永久访问令牌。您可以在调试器工具中验证它,过期时间字段应显示“从不”。


Fab*_*ian 6

我尝试了以下步骤:https: //developers.facebook.com/docs/marketing-api/access#graph-api-explorer

获取永久页面访问令牌

  • 转到Graph API Explorer
  • 应用程序中选择您的应用
  • 将长期访问令牌粘贴到Access Token中
  • 在" 访问令牌"旁边,选择您想要访问令牌的页面.访问令牌显示为新字符串.
  • 单击i以查看此访问令牌的属性
  • 再次单击"在访问令牌工具中打开"按钮以打开"访问令牌调试器"工具以检查属性

一个提示,当页面语言是英语时,它只适用于我.

  • 我已经浪费了几个星期才能使用 Facebook API。迄今为止,这是我遇到的最混乱和最不一致的标记。此解决方案仍然可以完美运行.. 2017 年 10 月 (2认同)

小智 6

由于所有早期的答案都是旧的,并且由于 facebook 的政策不断变化,其他提到的答案可能不适用于永久令牌。

经过大量调试后,我能够使用以下步骤获取永不过期的令牌:

图形 API 资源管理器:

  1. 打开graph api explorer并在右侧下拉框中选择要获取访问令牌的页面,单击发送按钮并复制生成的access_token,这将是一个短期令牌
  2. 复制该令牌并将其粘贴到访问令牌调试器中,然后按调试按钮,在页面底部单击“扩展令牌”链接,这会将令牌有效期延长至两个月。
  3. 复制该扩展令牌并将其与您的 pageId 粘贴到以下网址中,然后在浏览器网址中点击 https://graph.facebook.com/{page_id}?fields=access_token&access_token={long_lived_token}
  4. 您可以在访问令牌调试器工具中检查该令牌并验证“Expires”字段,该字段将显示“never”。

就是这样