OAuthException (# 15) Этот метод должен вызываться с приложением access_token при попытке опубликовать достижение.

Я постоянно получаю OAuthException (# 15) «Этот метод должен быть вызван с помощью приложения access_token» при попытке зарегистрировать достижение для моего приложения следующим образом:

FB.api("/APP_ID/achievements",
'post',
{achievement: FULL_ACHIEVEMENT_URL, access_token: ACCESS_TOKEN, display_order: 1},
function(response){
    getFlashMovieObject(referrer).fbDataCallback(response);
});

Структура файла достижений проверена и верна, значение ACCESS_TOKEN тоже в порядке — если я изменю метод HTTP на «получить», я получу массив, в котором хранятся зарегистрированные достижения.

Подскажите, пожалуйста, как правильно регистрировать достижения методами JS API?


person Vyacheslav Orlovsky    schedule 09.09.2011    source источник
comment
Вы достигли того, чего хотите?   -  person Keyne Viana    schedule 27.10.2011
comment
stackoverflow.com/questions/9814517/   -  person David Portabella    schedule 15.05.2013


Ответы (3)


Вы не можете вызывать методы, которым требуется маркер доступа к приложению, из клиентских SDK, таких как javascript SDK. Javascript SDK всегда будет неявно отправлять токен доступа пользователя для вызовов API. Это сделано из соображений безопасности.

надеюсь это поможет

person Anatoly Lubarsky    schedule 10.09.2011
comment
Кажется, это не причина - как я уже упоминал выше, запрос «get» с тем же требуемым токеном доступа успешно возвращает фактические данные. - person Vyacheslav Orlovsky; 12.09.2011
comment
get request — это другой метод, который просто перечисляет достижения и может быть менее ограниченным (не требует токена доступа к приложению). - person Anatoly Lubarsky; 12.09.2011
comment
Вы правы насчет ограничений на запрос get, но на самом деле токен доступа пользователя добавляется в параметры вызова JS API, если не передается переменная access_token. Я передаю свой токен доступа к приложению, и сниффер доказывает, что это тот, который выходит. - person Vyacheslav Orlovsky; 13.09.2011

Кажется, нет ответа. Я попробовал еще раз сегодня - и он просто начинает работать.)

ПРИМЕЧАНИЕ: не ожидайте, что запрос POST появится в вашем сниффере (как это сделал я :)), даже если вы указали соответствующее значение «метода» при вызове FB.api() - в любом случае вы увидите запрос GET. Это вынужденный обходной путь, и он работает.

person Vyacheslav Orlovsky    schedule 13.09.2011

Мое решение этой проблемы состояло в том, чтобы получить токен доступа APP с помощью PHP, а затем передать этот токен как часть объекта сообщения. Маркер доступа USER не будет работать.

Мне пришлось сделать это для Flash-игры, которую я создавал, которая использует Javascript SDK через внешний интерфейс. Вы не можете получить токен доступа к приложению с помощью Javascript, потому что вы раскроете секрет приложения, что является проблемой безопасности.

<?php

$APPLICATION_ID = YOUR_APP_ID;
$APPLICATION_SECRET = YOUR_APP_SECRET;

$token_url =    "https://graph.facebook.com/oauth/access_token?" .
        "client_id=" . $APPLICATION_ID .
        "&client_secret=" . $APPLICATION_SECRET .
        "&grant_type=client_credentials";
$app_token = file_get_contents($token_url);

?>
person Mark Goldsmith    schedule 12.11.2011