11

我想知道是否有可能拥有一个永不过期的访问令牌以发布到我的页面

现在我得到了访问令牌:

https://graph.facebook.com/me/accounts

我有publish_stream权限manage_pages,但使用访问令牌调试器我看到令牌在大约 1 小时后过期。有没有永不过期的方法?

4

5 回答 5

17

脸书开发者

通过使用长期用户访问令牌,查询 [User ID]/accounts 端点现在将为用户管理的页面提供不会过期的页面访问令牌。

因此,您必须通过服务器端调用将您的初始短期令牌交换为长期令牌:

https://graph.facebook.com/oauth/access_token?
client_id=APP_ID& client_secret=APP_SECRET& grant_type=fb_exchange_token& fb_exchange_token=EXISTING_ACCESS_TOKEN 

然后使用该长期令牌查询我/帐户。绝对适合我们,即调试器显示:'Expires: Never'


编辑 - 我们的流程

所以,我们要做的是:

  • 我们的应用程序的第一个客户端身份验证,在用户接受请求的权限并将他的帐户与我们的应用程序连接后,我们得到一个“代码”

    https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID &redirect_uri=YOUR_REDIRECT_URI &scope=COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES &response_type=code

  • 现在在我们的服务器应用程序中,我们使用服务器端身份验证来交换访问令牌的代码:

    https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID &redirect_uri=YOUR_REDIRECT_URI &client_secret=YOUR_APP_SECRET &code=CODE_GENERATED_BY_FACEBOOK

  • 使用这个 access_token,我们如上所述进行服务器端交换

  • 现在我们请求我/帐户,生成的 access_token 始终有效

希望有帮助

于 2012-10-03T10:20:48.827 回答
4

我稍微简化了皮特的回答,并添加了获取非过期页面访问令牌的步骤:

  1. 访问以下 URL 并记下浏览器地址栏中返回的访问令牌:

    https://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=REDIRECT_URI&scope=manage_pages,publish_stream&response_type=token

  2. 访问以下 URL 并在返回的数据中找到所需页面的名称并记下访问令牌:

    https://graph.facebook.com/me/accounts?access_token=ACCESS_TOKEN_RETURNED_FROM_STEP_1

  3. 访问以下 URL 并记下返回的访问令牌:

    https://graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=PAGES_ACCESS_TOKEN_FROM_STEP_2

  4. 使用访问令牌调试器确保您的访问令牌的配置文件 ID 与所需页面的 ID 匹配并且永不过期

于 2013-06-06T17:17:20.707 回答
2

从 2016 年开始,有一种更简单的方法可以做到这一点:)


  1. 转到https://developers.facebook.com/tools/explorer

  2. 从右上角的下拉列表中选择您的应用

  3. 单击右侧应用程序下拉列表下方的“获取访问令牌”按钮

  4. 在下拉列表中选择您想要获取访问令牌的页面。如果您没有看到列出的页面,则需要确保您已设置该页面的管理员角色。此外,您可能需要单击下拉菜单中的“获取页面访问令牌”,之后您的页面将在您下次单击“获取访问令牌”按钮时显示在下拉列表中。

  5. 单击“访问令牌”输入字段中的蓝色感叹号图标

  6. 单击弹出窗口右下角的“在访问令牌工具中打开”按钮

  7. 点击“Extend Access Token”按钮获取永不过期的token


本文的原始信息:https ://www.rocketmarketinginc.com/blog/get-never-expiring-facebook-page-access-token/

于 2016-05-23T14:51:47.310 回答
1

好的,所以花了大约一周的时间进行研究,但这是我的解决方案。在https://developers.facebook.com/tools/explorer/中确保将 manage_page 作为 access_token 的一部分。之后将此代码与您的应用程序 ID、机密和重定向一起使用:

<?php
   app_id = "APP_ID";
   $app_secret = "APP_SECERET";
   $post_login_url = "REDIRECT_URL";


   $code = $_REQUEST['code'];

   //Obtain the access_token with publish_stream permission 
   if(empty($code)){ 
      $dialog_url= "http://www.facebook.com/dialog/oauth?"
       . "client_id=" .  $app_id 
       . "&redirect_uri=" . urlencode( $post_login_url)
       .  "&COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES";
      echo("<script>top.location.href='" . $dialog_url 
      . "'</script>");
     }
    else {


      $token_url="https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id 
       . "&redirect_uri=". urlencode($post_login_url)
       . "&client_secret=" . $app_secret
       . "&code=" . $code;
      $response = file_get_contents($token_url);
      $params = null;
      parse_str($response, $params);
      $access_token = $params['access_token'];
      echo 'access token: ' . $access_token.'<br>';

        if($access_token){


          $token_url="https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id 
       . "&redirect_uri=". urlencode($post_login_url)
       . "&client_secret=" . $app_secret
       .'&grant_type=fb_exchange_token'
       . "&fb_exchange_token=" . $access_token;
       $response = file_get_contents($token_url);
       $access_token = $params['access_token'];
       echo 'new access token: '.$access_token;

        }
    }*/

?>

之后,复制“新访问令牌”并返回 https://developers.facebook.com/tools/explorer/ 当您通过新访问令牌进入访问令牌字段时。然后点击提交。之后在节点中,您将看到 + _ ___单击此按钮并向下滚动到帐户并单击该按钮。找到您需要访问令牌的页面并将其复制并粘贴到访问密钥字段中。点击调试,你会看到它永远不会过期。保存该令牌,只要您不重置您的应用程序机密,它将保持有效。

于 2013-04-01T11:09:29.860 回答
0

您可以使用来自 facebook 的以下 api 将令牌寿命刷新到 60 天,并且就在令牌即将到期时,在 60 天内再次调用相同的 api 以从该时间点将其寿命刷新回 60 天令牌过期是存在于 expires 参数中,其值以秒为单位

将 CLIENT_ID 和 CLIENT_SECRET 替换为其实际值

https://graph.facebook.com/oauth/access_token?client_id= &client_secret=&grant_type=fb_exchange_token&fb_exchange_token=

在 ACCESS_TOKEN 中,放入实际的令牌值而不附加“access_token=”

于 2013-10-17T04:48:05.763 回答