Не удалось получить токен с долгосрочным доступом, используя facebook graph api

Я новичок в интеграции 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 = {недолговечны-маркер}

Я получаю возврат

{ "error": "Неверный ответ" }

Может кто-то уточнить, что я могу сделать неправильно, или шаги более подробно, которые работают на вас при приобретении этого долгосрочного токена.

Я попытался следить за тем, что происходит в этой теме Facebook-токены доступа к Интернету - эти истечения? без каких-либо успехов. Любая помощь будет принята с благодарностью.

Спасибо за ваше время и помощь. Cheers,

-Ryan

Ответы

Ответ 1

Вы не можете получить 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 с сервера

Ответ 2

Итак, я подумал, что пересмотреть это и предоставить документацию, которую я написал, которая, надеюсь, поможет кому-то еще добиться этого!

ONE. Создать приложение

Создайте приложение, связанное с пользователем страницы, к которой вы хотите получить доступ.

TWO​​STRONG > . Получить требуемые части информации

После создания приложения у нас должны быть две ключевые части информации:

Идентификатор приложения: 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= {app-id} & client_secret = {приложение-секрет} & fb_exchange_token = {недолговечны-маркер}

Замените {app-id}, {app-secret} и {short-live-token} на три бита информации, которые вы записали до сих пор.

Вы должны получить запрос, например:

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

Поместите этот запрос в строку URL-адреса интернет-браузера. Вы должны получить ответ в окне, который выглядит примерно так:

access_token = DDDDD & истекает = 5184000

DDDDD (должно быть длиной ~ 200 символов)

ЧЕТЫРЕ. Тестовый токен (часть 1)

Если вы введете выделенную часть на вкладку на следующем сайте отладки:

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

Он должен истечь через 2 месяца.

FIVE. Получите неограниченный токен страницы

Теперь, принимая к сведению этот новый long-live-token, используйте это, чтобы получить токен, который не истекает, если связанное приложение не удаляется из доступа пользователя или не удаляется. При запросе мы используем либо имя страницы, либо желательно идентификатор страницы:

Вы можете получить свой идентификатор страницы facebook, используя что-то вроде http://findmyfacebookid.com/ Мы будем ссылаться на ваш идентификатор страницы как 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)

Возьмите выделенную часть и введите ее на страницу отладки, и вы должны получить то, что показывает, что токен никогда не истекает, и вам удалось получить ваш истекший токен страницы.

SEVEN. Дай пять!

Извините за длинный список того, как этого достичь, но мне лучше всего дать весь процесс вместо небольшого фрагмента. Дайте мне знать, если вы найдете это полезным или у вас есть лучший способ достичь любого из шагов.

Ответ 3

Facebook PHP SDK уже реализовал метод получения долгоживущего токена с использованием краткосрочного токена, после успешного входа в систему и получения недолговечного токена, простого вызова

$result = $facebook->setExtendedAccessToken();

если $result равно null, это означает, что вы получили долгоживущий токен доступа.

Ответ 4

клиентская сторона

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