facebook:永久页面访问令牌?

Posted

技术标签:

【中文标题】facebook:永久页面访问令牌?【英文标题】:facebook: permanent Page Access Token? 【发布时间】:2013-06-16 09:14:15 【问题描述】:

我在一个项目中工作,该项目将 facebook 页面作为其数据源之一。它定期从中导入一些数据,不涉及 GUI。然后我们使用一个网络应用程序来显示我们已经拥有的数据。

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

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

编辑:我刚刚发现它在这里得到了回答:Long-lasting FB access-token for server to pull FB page info

【问题讨论】:

Long-lasting FB access-token for server to pull FB page info的可能重复 看起来确实如此。我有更好的标题,他有更详细的问题,我们都接受了大致相同的答案。 【参考方案1】:

按照 Facebook 的 extending page tokens documentation 中的说明,我能够获得一个不会过期的页面访问令牌。

除非另有说明,否则我建议对所有这些步骤使用Graph API Explorer。

0。创建 Facebook 应用

如果您已有应用,请跳至第 1 步。

    转到My Apps。 点击“+ 添加新应用”。 设置网站应用。

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

1。获取用户短期访问令牌

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

“访问令牌”字段中显示的令牌是您的短期访问令牌。

2。生成长期访问令牌

按照 Facebook 文档中的these instructions,向

发出 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 批准使用”,还有一个下方同时出现带有“This doesn't let the app post to Facebook”文字的挂锁。因此应该在上面的步骤 1.5 和 1.6 之间插入一个新步骤,阅读“Do a lot of voted sh*t with your app,然后将其提交以供审核,然后祈祷并等待。” :-( 有人知道纯测试应用程序的解决方法吗? 对于任何到达最后一步的人,浏览器只会返回:message: "(#100) Tried accessing nonexisting field (accounts) on node type (Page)", type: "OAuthException", code: 100 转到 FB 访问令牌调试器并测试您的 long_lived_access_token。我一直看到,几分钟后,如果您返回并重新检查 long_lived_access_token,FB 访问令牌调试器将指示该令牌是永久的(过期:永不) 我发誓,如果我没有阅读这个答案,我仍然会用一个短暂的令牌将我的头撞到墙上......可惜最后一部分不起作用......我收到(#100) Tried accessing nonexisting field (accounts) on node type (Page) 错误...无法继续执行第 5 步...不过,谢谢... LE:查看@Vlasec 提供的答案的最后一部分。您可以通过查询 /pageId?fields=access_token&access_token=long_lived_access_token 获取永久访问令牌,因此问题已解决。 必须在最后一步使用它来获取我的永久访问令牌,因为它说“帐户”不存在,即使对于 v2.7:https://graph.facebook.com/v2.7/page_id?fields=access_token&access_token=long_lived_access_token 在最后一步我得到以下异常 "error": "message": "Syntax error \"Expected end of string instead of \"?\".\" at character 11: access_toke\u200c\u200bn", "type": "OAuthException", "code": 2500, "fbtrace_id": "A8+gtSaShIO" 有谁知道怎么解决????【参考方案2】:

这是我仅使用 Graph API Explorer 和 Access Token Debugger 的解决方案:

    图形 API 浏览器: 从右上角的下拉菜单中选择您的应用 从下拉列表(访问令牌字段右侧)中选择“获取用户访问令牌”并选择所需的权限 复制用户访问令牌 访问令牌调试器: 粘贴复制的令牌并按“调试” 按“扩展访问令牌”并复制生成的长期用户访问令牌 图形 API 浏览器: 将复制的令牌粘贴到“访问令牌”字段中 使用“PAGE_ID?fields=access_token”发出 GET 请求 在响应中找到永久页面访问令牌(节点“access_token”) (可选)访问令牌调试器: 粘贴永久令牌并按“调试” “过期”应为“从不”

(使用 API 版本 2.9-2.11、3.0-3.1 测试)

【讨论】:

没有“扩展访问令牌”按钮可按。也许他们把它拿出来了。 我看到了“扩展”按钮 在扩展访问令牌(步骤 2)并再次调试后,它应该永远不会过期。您可以通过第 3 步和第 4 步。 感谢这个回答方式比上面的大回答更容易理解。这真的很有帮助。 哦,伙计,你着火了!十分感谢!我浪费了很多时间来寻找这个选项,因为我无法正确调试应用程序!【参考方案3】:

我制作了一个 php 脚本以使其更容易。 Create an app。在Graph API Explorer 中选择您的应用程序并获取具有 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;

【讨论】:

+1 刚刚尝试过,在所有这些部分贬值的答案中,它创造了奇迹!我喜欢这个答案,因为未来的修改很容易,只需在这里和那里进行一点编辑。 对不起,我不被允许编辑这个答案。所以,对于 Graph API 2.9,我改写了another answer。 似乎他们用 2.9 改变了一些东西,因为这些例子都不再起作用了【参考方案4】:

除了Vlasec答案中推荐的步骤,还可以使用:

Graph API explorer 进行查询,例如/pageId?fields=access_token&amp;access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_EXPLORER Access Token Debugger 获取有关访问令牌的信息。

【讨论】:

这不再起作用了。令牌仅持续一个小时 @flashsnake 你真的在 v2.8 上测试过这个吗?令牌调试器显示 Expires Never 我不记得了。我可能已经测试过了。【参考方案5】:

另一个让生活更轻松的 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;

?>

附录:(替代)

从图表 2.9 开始,您可以在调试短访问令牌后,只需单击Access Token Debugger tool 底部的扩展访问令牌,即可跳过获取长访问令牌的大部分麻烦。掌握了有关pageidlonglivedtoken 的信息,运行下面的php 以获得永久访问令牌。

<?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;

?>

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

感谢dw1 和Rob

【讨论】:

扩展访问令牌按钮不存在,是我遗漏了什么吗? @CesarBielich:你必须先调试一个短访问令牌。当您调试一个简短的应用程序令牌时,它会出现below the results。由于您看不到它,因此您必须调试了用户访问令牌。 请注意,此答案不适用于使用访问令牌;只能使用应用访问令牌 用户访问令牌不能是永久的。它们最多可以生成长令牌。 @CesarBielich 我认为你在这里混淆了一些东西。您可以为用户、应用程序和页面创建访问令牌。您需要在“应用程序”字段中输入您创建的choose an app,而不是Graph API Explorer,然后才能请求令牌。 @CesarBielich:如果第二种方法对您来说太混乱,请使用第一种方法。您只需填写第一个输入字段,一切都会自动发生:) 抱歉,我在评论我昨晚刚刚发布的另一篇帖子,哈哈。是的,出于某种原因,我无法让你的工作让我成为一个永不过期的令牌。我不得不在第二次通话中删除v2.9,这对我有用。奇怪【参考方案6】:

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

获取永久页面访问令牌

转到图形 API 资源管理器 在应用程序中选择您的应用程序 将长期访问令牌粘贴到 访问令牌访问令牌旁边,选择您想要访问令牌的页面。访问令牌显示为新字符串。 点击i查看此访问令牌的属性 再次点击“在Access Token Tool中打开”按钮,打开“Access Token Debugger”工具查看属性

一个提示,只有当页面语言是english时它才对我有用。

【讨论】:

这个人!!! 5 种虚拟啤酒。这可以替换已批准答案的第 5 步。图形版本 2.8 我已经浪费了数周时间来使用 Facebook API。迄今为止,这是我遇到的最困惑和最不一致的令牌。此解决方案仍然完美运行.. 2017 年 10 月【参考方案7】:

如果您只请求页面数据,则可以使用页面访问令牌。您只需授权用户一次即可获得用户访问令牌;将其有效期延长至两个月,然后请求页面的令牌。这一切都在Scenario 5 中进行了解释。请注意,获取的页面访问令牌仅在用户访问令牌有效时才有效。

【讨论】:

抱歉,我可能不够清楚。我已经阅读了令牌,我只需要学习如何向用户请求许可并将令牌转移到我的应用程序。看来我需要创建一些唯一目的是请求权限的 Facebook“应用程序”,对吗? @Viasec 正确获取访问令牌的唯一方法是通过应用程序,如此处所述developers.facebook.com/docs/facebook-login 谢谢,我一定是忽略了它,我认为它在 API 部分的某个地方,这是错误的。我会看看那个,我希望它能回答我的问题。【参考方案8】:

在获得永久访问令牌时,我按照 Donut 提到的上述 5 个步骤进行操作。然而,在第 5 步中,在生成永久访问令牌时,它会返回长期访问令牌(有效期为 2 个月)而不是永久访问令牌(永不过期)。我注意到的是 Graph API 的当前版本是 V2.5。如果您尝试使用 V2.5 获取永久访问令牌,它会提供长期访问令牌。尝试使用 V2.2 进行 API 调用(如果您无法在图形 api 资源管理器中更改版本,请点击 API 调用 https://graph.facebook.com/v2.2/account_id/accounts?access_token=long_lived_access_token 在 V2.2 的新标签中)然后您将获得永久访问令牌(永不过期)

【讨论】:

返回 api 版本以取得结果只会导致我发现未来需要做更多的工作,特别是因为 API 版本会在一段时间后过期。 它返回 null :( 我们如何获得页面访问令牌?【参考方案9】:

除了提到的方法之外,值得一提的是,对于服务器到服务器的应用程序,您还可以使用这种形式的永久访问令牌: app_id|app_secret 这种类型的访问令牌称为 App Token。它通常可用于调用 Graph API 和查询应用程序后端中的公共节点。 这里提到:https://developers.facebook.com/docs/facebook-login/access-tokens

【讨论】:

它是否允许对页面进行任何形式的访问?我认为它没有,在这种情况下它并没有真正回答这个问题。 @Vlasec 它允许您访问公共帖子上的 cmets 虽然这对某些人来说可能已经足够了,但它并不能回答问题。【参考方案10】:

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

经过大量调试,我可以使用以下步骤获得永不过期的令牌:

图形 API 浏览器:

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

就是这样

【讨论】:

您好,感谢您的回答。它看起来很简单。也许您可以提供一个使用 Facebook API URL 而不是其用户界面的答案?例如,我 7 年前开发的软件应该在客户允许应用程序访问页面时自动完成所有操作。 我现在不再积极参与任何与 Facebook 相关的活动。但是,如果您确定您的答案是解决方案,我可以将其标记为这样并检查赞成票并保留它是否适用于其他人。 @Vlasec 答案是正确的,并且在生产中使用相同的令牌。【参考方案11】:

感谢@donut,我设法在 javascript 中获得了永不过期的访问令牌。

// Initialize exchange
fetch('https://graph.facebook.com/v3.2/oauth/access_token?grant_type=fb_exchange_token&client_id=client_id&client_secret=client_secret&fb_exchange_token=short_lived_token')
.then((data) => 
    return data.json();
)
.then((json) => 
    // Get the user data
    fetch(`https://graph.facebook.com/v3.2/me?access_token=$json.access_token`)
    .then((data) => 
        return data.json();
    )
    .then((userData) => 
        // Get the page token
        fetch(`https://graph.facebook.com/v3.2/$userData.id/accounts?access_token=$json.access_token`)
        .then((data) => 
            return data.json();
        )
        .then((pageToken) => 
            // Save the access token somewhere
            // You'll need it at later point
        )
        .catch((err) => console.error(err))
    )
    .catch((err) => console.error(err))
)
.catch((err) => 
    console.error(err);
)

然后我像这样使用保存的访问令牌

fetch('https://graph.facebook.com/v3.2/page_id?fields=fan_count&access_token=token_from_the_data_array')
.then((data) => 
    return data.json();
)
.then((json) => 
    // Do stuff
)
.catch((err) => console.error(err))

我希望有人可以修剪这段代码,因为它有点乱,但这是我能想到的唯一方法。

【讨论】:

【参考方案12】:

如果你有 facebook 的应用,那么你可以试试 app-id & app-secret。

喜欢:

access_token=your-app_id|your-app_secret

不需要频繁更换令牌。

【讨论】:

【参考方案13】:

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

    从Graph Explorer tool,选择相关权限并获取短寿命页面访问令牌。 Go to debugger tool 并粘贴您的访问令牌。然后,点击页面底部的“扩展令牌”按钮。 复制扩展令牌并在此 API 中使用: https://graph.facebook.com/v2.10/me?fields=access_token&access_token= 这应该会为您返回永久访问令牌。您可以在调试器工具中验证它,过期字段应显示“从不”。

【讨论】:

第 4 步似乎对我不起作用。我收到“(#100)尝试访问节点类型(用户)上不存在的字段(access_token)” 您的extended_access_token 需要页面访问令牌而不是用户。在第一步中,当您选择权限时,您必须使用 Graph Explorer 中提供的下拉菜单将令牌类型更改为页面。另外,为了验证,如果您在第 4 步中查询 fields=name,您应该得到的是页面名称而不是用户名。【参考方案14】:

已达到应用程序请求限制 (#4) - FB API v2.1 及更高版本

这个答案让我得到了“我们的最终答案”,因此它非常相关,所以我将它附加在这里。虽然它与上述有关,但它是不同的,似乎 FB 简化了一些过程。

当 FB 将 api 更新到 v 2.1 时,我们网站上的分享计数停止工作。在我们的例子中,我们已经有一个 FB 应用程序并且我们没有使用 FB 登录。所以我们需要做的是获得一个FB APP Token来发出新的请求。这是截至 2016 年 8 月 23 日的数据。

    转至:https://developers.facebook.com/tools/explorer

    选择 api 版本,然后使用 GET 并粘贴以下内容:

    /oauth/access_token?client_id=app-id&client_secret=app-secret&grant_type=client_credentials
    

    您需要从应用页面获取您的应用 ID应用密码。 Main FB Apps developer page

    运行图形查询,你会看到:

    
       "access_token": "app-id|app-token",
       "token_type": "bearer"
    
    

    在哪里

    "app-id"
    "app-token"
    将是您的 FB 应用页面中的应用 id 和您刚刚收到的生成的 FB 应用 HASH。

    接下来去测试你的新APP访问令牌:FB Access Token tester

    你应该看到,通过粘贴

    "app-token"
    进入令牌测试器,一个基于单个应用程序的令牌,没有到期日期/时间。

在我们的例子中,我们使用的是 FB js sdk,因此我们将调用更改为这样 (请注意,此 仅获取分享计数,而不是分享和评论计数的组合,例如它曾经是)

FB.api(
    '/','GET',
    // this is our FB app token for our FB app 
        access_token: FBAppToken,
        "id":"$shareUrl","fields":"id,og_object engagement "

现在可以正常工作了。这需要大量搜索和 FB 的官方错误报告,以确认我们必须开始向 FB api 发出标记化请求。顺便说一句,我确实要求他们 (FB) 在提到标记化请求的错误代码 (#4) 中添加一个线索。

我刚刚从我们的一位开发人员那里收到另一份报告,称由于对标记化请求的新需求,我们的 FB 评论计数也被打破,因此我将相应地更新。

【讨论】:

始终是应用程序的用户进行登录并允许应用程序访问。无论如何,这似乎并没有创建页面访问令牌,所以我认为这不是问题的有效答案。不过很有趣——也许自己做一个问答?【参考方案15】:

这些示例中的许多都不起作用,不确定是不是因为 2.9v 出来但我撞到了头。无论如何,我采用了@dw1 版本并在@KFunk 视频的帮助下对其进行了一些修改,并在 2.9 版本中为我工作。希望这会有所帮助。

$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/$args['pageid']?fields=access_token&access_token=$longtoken")); // get user id
    $finaltoken=$r->access_token;
    return $finaltoken;

【讨论】:

不错的 sn-p,但这个问题不是关于如何用 PHP 制作,而是关于如何使用 API 本身,这也可以在 Java 或 .NET 中完成。例如,我需要用 Java 来做。对于不使用 PHP 的人来说,伪代码或分步指南会更有用。 @Vlasec 我认为这个 PHP sn-p 非常接近任何伪代码并且非常容易理解。 Casar 只是使用了一些 facebook 已经提供的 API。其余的东西是不言自明的。【参考方案16】:

截至 2020 年 4 月,我之前的永久页面令牌开始在 1 到 12 小时之间到期。我开始使用具有manage_pages 权限的用户令牌来实现之前的目标(轮询页面的事件)。这些令牌似乎是永久性的。

我根据这篇文章中的信息创建了一个 python 脚本,托管在github.com/k-funk/facebook_permanent_token,以跟踪需要哪些参数,以及哪些获取永久令牌的方法有效。

【讨论】:

【参考方案17】:

我根据甜甜圈的回答创建了一个小型 NodeJS 脚本。将以下内容存储在名为 get-facebook-access-token.js 的文件中:

const fetch = require('node-fetch');
const open = require('open');

const api_version = 'v9.0';
const app_id = '';
const app_secret = '';
const short_lived_token = '';
const page_name = '';

const getPermanentAccessToken = async () => 
  try 
    const long_lived_access_token = await getLongLivedAccessToken();
    const account_id = await getAccountId(long_lived_access_token);
    const permanent_page_access_token = await getPermanentPageAccessToken(
      long_lived_access_token,
      account_id
    );
    checkExpiration(permanent_page_access_token);
   catch (reason) 
    console.error(reason);
  
;

const getLongLivedAccessToken = async () => 
  const response = await fetch(
    `https://graph.facebook.com/$api_version/oauth/access_token?grant_type=fb_exchange_token&client_id=$app_id&client_secret=$app_secret&fb_exchange_token=$short_lived_token`
  );
  const body = await response.json();
  return body.access_token;
;

const getAccountId = async (long_lived_access_token) => 
  const response = await fetch(
    `https://graph.facebook.com/$api_version/me?access_token=$long_lived_access_token`
  );
  const body = await response.json();
  return body.id;
;

const getPermanentPageAccessToken = async (
  long_lived_access_token,
  account_id
) => 
  const response = await fetch(
    `https://graph.facebook.com/$api_version/$account_id/accounts?access_token=$long_lived_access_token`
  );
  const body = await response.json();
  const page_item = body.data.find(item => item.name === page_name);  
  return page_item.access_token;
;

const checkExpiration = (access_token) => 
  open(`https://developers.facebook.com/tools/debug/accesstoken/?access_token=$access_token&version=$api_version`);


getPermanentAccessToken();

填写常量然后运行:

npm install node-fetch
npm install open
node get-facebook-access-token.js

运行脚本后,会在浏览器中打开一个页面,显示令牌及其有效期。

【讨论】:

【参考方案18】:

我发现this answer 指的是this tool,这真的很有帮助。

我希望这个答案在您阅读本文时仍然有效。

【讨论】:

好的。甜甜圈的答案是否仍然有效,还是需要一些额外的步骤?

以上是关于facebook:永久页面访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章

Facebook - 永久用户访问令牌

Facebook - 如何获得永久用户访问令牌[重复]

用于服务器拉取 FB 页面信息的持久 FB 访问令牌

ASP.NET Web API 和身份与 Facebook 登录

自动进行Facebook页面访问令牌生成

为 Facebook 页面生成“永不过期”访问令牌