OAuthException: этот код авторизации был использован

У меня есть приложение facebook, в котором я использовал php CURL для авторизации и получения токена доступа и идентификатора пользователя facebook. У меня есть следующий код для разрешения доступа пользователя:

function AlowUserAccess()
 {
    include "config.php"; 
    error_reporting(0);
    if($_REQUEST['code'])
    {
        $returnurl = $fbconfig['baseUrl'];
        $url = "https://graph.facebook.com/oauth/access_token?client_id=".$fbconfig['appid']."&client_secret=".$fbconfig['secret']."&grant_type=fb_exchange_token&fb_exchange_token=".$_REQUEST['code'];
        $ch = curl_init();
        curl_setopt_array($ch, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_VERBOSE => true
            ));
        $result = curl_exec($ch);
        curl_close($ch);
            return $result;
}

Я печатаю возвращаемое значение $result вышеуказанной функции и возвращаю следующие ошибки:

 {"error":{"message":"Malformed access token AQxxxxxxxxxGypoLOAjcig9qSai_MuNna8marHxuddddCno6T_NqqD19zzzzzzzGNy_FJbcK9heZKPCSysXBYHFTD_AgzMxwE5BqIEHvyK-QGl5kv1R0bPOUx7V0xs5-OQdsfddsRc0uoR_y1ElTlY4YCrWr5dfssdfsdfdsITrXezhcv1S_pu-3g0Kx8v-VtsvMI6oVYlC0J4eogSL6yhIsWrNS6uuTZIWwE0BGWJCjVieU-BbCPLsqkasdVFjnPz489xdb2_bSfVBKvsdfsdfaefYtn3luygCs","type":"OAuthException","code":190}}

person CodeManiac    schedule 18.05.2013    source источник


Ответы (2)


Вы используете код, который Facebook прислал вам, чтобы попытаться получить долгоживущий токен доступа.

Сначала вы должны получить краткосрочный токен доступа. Затем замените краткосрочный токен доступа на долгоживущий токен доступа (это вызов, который вы пытаетесь сделать выше).

Получение краткосрочного токена доступа:

https://graph.facebook.com/oauth/access_token?client_id={client_id}&redirect_uri={your redirect uri}&client_secret={client_secret}&code={code}

Где код — это код, который вы используете в данный момент. Не уверен, что redirect_uri требуется, но я его использую.

Это вернет строку с кодировкой формы, например

access_token=AQADEADBEEF&expires=11111

Затем вы можете использовать этот токен доступа (AQADEADBEEF) вместо вашего fb_exchange_token выше.

person Andy Jones    schedule 20.05.2013
comment
Большое спасибо, Энди Джонс. Это действительно помогает мне. моя проблема решена - person CodeManiac; 22.05.2013

Попробуйте такие варианты:

CURLOPT_USERAGENT       => 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
CURLOPT_COOKIEFILE      => 'anc.tmp',
CURLOPT_COOKIEJAR       => 'anc.tmp',
CURLOPT_FOLLOWLOCATION  => 1,
CURLOPT_RETURNTRANSFER  => 1,
CURLOPT_SSL_VERIFYHOST  => 0,
CURLOPT_SSL_VERIFYPEER  => 0,
CURLOPT_TIMEOUT         => 120

Google: класс CURL SEM Labs для оболочки.

person Kohjah Breese    schedule 18.05.2013