无法使用facebook graph api获取长期访问令牌

时间:2013-09-06 01:50:57

标签: facebook facebook-graph-api facebook-access-token

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

  

GET / oauth / access_token?
      grant_type = fb_exchange_token&安培;
      CLIENT_ID = {应用ID}&安培;       client_secret = {应用秘密}&安培;       fb_exchange_token = {短命令牌}

我得到了回报

  

{“错误”:“无效回复”}

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

我试图跟踪此帖子Facebook Page Access Tokens - Do these expire?中发生的事情,但没有取得更多成功。任何帮助将不胜感激。

感谢您的时间和帮助。 欢呼声,

-Ryan

4 个答案:

答案 0 :(得分:22)

您无法使用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,则可以使用从不到期令牌。在这里查看接受的答案:What are the Steps to getting a Long Lasting Token For Posting To a Facebook Fan Page from a Server

答案 1 :(得分:10)

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

<强> ONE 即可。创建应用程序

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

<强> TWO 即可。获取所需的信息片段

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

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

App Secret: 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= {应用ID}&安培; client_secret = {应用秘密}&安培; fb_exchange_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

将此查询放入互联网浏览器的网址栏。您应该在窗口中看到如下所示的响应:

=的access_token&DDDDD放大器;期满= 5184000

DDDDD (应该长约200个字符)

<强> FOUR 即可。测试令牌(第1部分)

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

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

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

<强> FIVE 即可。获取非过期页面令牌

现在注意这个新的长实时令牌,我们将使用它来获取一个不会过期的令牌,除非从用户的访问中删除关联的应用程序或删除它。 我们在发出请求时使用页面名称或最好使用page-id:

您可以使用http://findmyfacebookid.com/之类的内容获取您的Facebook页面ID 我们将您的网页ID称为 EEEEE

https://graph.facebook.com/ {页-ID} /字段=&的access_token放大器; =的access_token {长活令牌}

您应该收到如下请求:

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

这将返回如下内容: {    &#34; access_token&#34;:&#34; FFFFF&#34;,    &#34; id&#34;:&#34; 131062838468&#34; }

FFFFF (应该长约200个字符)

<强> SIX 即可。测试令牌(第2部分)

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

<强> SEVEN 即可。举手击掌!

对于如何实现这一目标的长列表感到抱歉,但我发现最好只给出整个过程而不只是一个小片段。如果您发现这有用,或者您有更好的方法来实现任何步骤,请告诉我。

答案 2 :(得分:1)

Facebook PHP SDK已经实现了使用短期令牌获取长期令牌的方法,在成功登录并获得短期令牌后,简单调用

$result = $facebook->setExtendedAccessToken();

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

答案 3 :(得分: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;
    }
}