16

我不熟悉将 facebook 集成到我正在开发的网站中,并尝试按照此处的说明获取长期访问令牌:https ://developers.facebook.com/docs/facebook-login/access-tokens/ 即使在此处使用 Graph API Explorer:https ://developers.facebook.com/tools/explorer/ 我输入以下内容并使用我的 AppID 和 AppSecret 以及按获取访问令牌时获得的当前令牌填充它...

获取/oauth/access_token?
grant_type=fb_exchange_token&
client_id={app-id}& client_secret={app-secret}& fb_exchange_token={short-lived-token}

我得到回报

{“错误”:“无效响应”}

有人可以详细说明我可能做错了什么,或者更详细的步骤对您获得这个长期令牌有用。

我试图关注这个线程中发生的事情Facebook 页面访问令牌 - 这些会过期吗?没有更多的成功。任何帮助将不胜感激。

感谢您的时间和帮助。干杯,

-瑞安

4

5 回答 5

23

您无法long-lived user token使用Graph API Explorer. 您必须提出以下GET请求:

https://graph.facebook.com/oauth/access_token?
grant_type=fb_exchange_token&
client_id={app-id}& client_secret={app-secret}& fb_exchange_token={short-lived-token}

您可以在浏览器中查看。

如果您需要page access token,您可以拥有一个永不过期的令牌。在此处查看已接受的答案:获取用于从服务器发布到 Facebook 粉丝页面的持久令牌的步骤是什么

于 2013-09-06T06:02:58.713 回答
11

所以我想我会重新审视这个并提供我写的文档,希望能帮助其他人实现这一点!

。创建应用程序

创建与您要访问的页面的用户关联的应用程序。

。获取所需的信息

创建应用程序后,我们应该有两个关键信息:

应用 ID: AAAAA (大约 15 个字符长)

应用程序机密:BBBBB(大约 32 个字符长)

通过这些转到https://developers.facebook.com/tools/explorer 确保从顶部的下拉框中选择正确的应用程序。

单击获取访问令牌并获取“新”令牌。

在这里,您需要为特定应用的目的选择适当的权限。

CCCCC(应该是〜200个字符长)

。获得长寿令牌(2 个月)

然后,您应该拥有运行查询以获取长期(2 个月)令牌所需的信息:

https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id= {app-id}& client_secret={app-secret}& fb_exchange_token={short-lived-token}

将 {app-id}、{app-secret} 和 {short-lived-token} 替换为您目前注意到的三位信息。

您应该收到如下请求:

https://graph.facebook.com/oauth/access_token?%20grant_type=fb_exchange_token&%20client_id=AAAAA&%20client_secret=BBBBB&%20fb_exchange_token=CCCCC

将此查询放入 Internet 浏览器的 url 栏中。您应该在窗口中得到如下所示的响应:

access_token=DDDDD&expires=5184000

DDDDD(应该是 ~200 个字符长)

。测试令牌(第 1 部分)

如果您将突出显示的部分输入到以下调试站点的输入中:

https://developers.facebook.com/tools/debug/

它应该给你大约2个月的到期时间。

。获取非过期页面令牌

现在记下这个新的长寿命令牌,我们将使用它来获取一个不会过期的令牌,除非关联的应用程序从用户的访问权限中删除或被删除。我们在发出请求时使用页面名称或最好使用页面 ID:

您可以使用类似http://findmyfacebookid.com/的方式获取您的 facebook 页面 id 我们将您的页面 id 称为EEEEE

https://graph.facebook.com/ {page-id}/?fields=access_token&access_token={long-live-token}

您应该收到如下请求:

https://graph.facebook.com/EEEEE/?fields=access_token&access_token=DDDDD

这将返回如下内容: { "access_token": "FFFFF", "id": "131062838468" }

FFFFF(应该是 ~200 个字符长)

。测试令牌(第 2 部分)

将突出显示的部分输入调试页面,您应该会得到一些显示令牌永不过期的内容,并且您已经成功获取永不过期的页面令牌。

。举手击掌!

很抱歉,如何实现这一点的清单很长,但我发现最好给出整个过程而不是一个小片段。如果您觉得这有帮助,或者您有更好的方法来完成任何步骤,请告诉我。

于 2014-08-20T06:41:57.470 回答
1

Facebook PHP SDK已经实现了使用short-lived token获取long-lived token的方法,登录成功后获取到short-lived token,简单调用

$result = $facebook->setExtendedAccessToken();

如果 $result 为 null,则表示您获得了长期访问令牌。

于 2014-02-20T11:35:48.573 回答
0

客户端

        if (response.status === 'connected') {
            {
                event.preventDefault();
                FB.login(function (response) {
                    if (response.authResponse) {
                        var profileId = response.authResponse.userID;
                        var accessToken = response.authResponse.accessToken;
                        var e = response.authResponse.accessToken;
                        document.getElementById('token').innerHTML = e;
                        var profileName = "";
                        var pagesList = "";
                        var isPage = 0;
                        var type = "fb";
                        $.ajax({
                            url: "WebService1.asmx/getlonToken",
                            type: "POST",
                            dataType: 'json',
                            data: '{accessToken:"' + accessToken + '"}',
                            contentType: "application/json; charset=utf-8",
                            async: true,
                            success: function (response) {
                                accessToken = response.d;
                                document.getElementById('status').innerHTML = accessToken;
                            },
                            error: function (e) {
                                alert('Error' + e);
                            }
                        });



                    }
                }, { scope: 'user_about_me,friends_about_me,user_activities,friends_activities,user_birthday,friends_birthday,user_education_history,friends_education_history,user_events,friends_events,user_groups,friends_groups,user_hometown,friends_hometown,user_interests,friends_interests,user_likes,friends_likes,user_location,friends_location,user_notes,friends_notes,user_photos,friends_photos,user_relationships,friends_relationships,user_relationship_details,friends_relationship_details,user_status,friends_status,user_videos,friends_videos,user_website,friends_website,email,manage_pages,publish_stream,read_stream,read_page_mailboxes,read_insights, read_mailbox' });

            }

服务器端

   [WebMethod]
    public string getlonToken(string accessToken)
    {
        var fb = new FacebookClient(accessToken);
        dynamic result = fb.Get("oauth/access_token", new
            {
                client_id = 123,
                client_secret = "123fff45",
                grant_type = "fb_exchange_token",
                fb_exchange_token = accessToken,
                scope = "user_about_me,friends_about_me,user_activities,friends_activities,user_birthday,friends_birthday,user_checkins,friends_checkins,user_education_history,friends_education_history,user_events,friends_events,user_groups,friends_groups,user_hometown,friends_hometown,user_interests,friends_interests,user_likes,friends_likes,user_location,friends_location,user_notes,friends_notes,user_photos,friends_photos,user_relationships,friends_relationships,user_relationship_details,friends_relationship_details,user_religion_politics,friends_religion_politics,user_status,friends_status,user_videos,friends_videos,user_website,friends_website,email,manage_pages,publish_stream,read_stream,read_page_mailboxes,read_insights,ads_management"
            });

        fb.AccessToken = (string)result["access_token"];
        return fb.AccessToken;
    }
}
于 2015-04-15T10:23:30.810 回答
0

您可以从Graph API Explorer生成 Short-Lived Token 。

然后,您可以在Access Token Debugger的 Long-Lived Token 中扩展它。我每次都这样做。

访问令牌调试器

于 2021-11-04T09:02:03.767 回答