Ошибка facebook 'Ошибка проверки кода проверки'

очень странная ошибка. Я использую gide http://developers.facebook.com/docs/authentication/ . поэтому я создаю запрос к fb и передаю redirect_uri. Я использую тестовый сайт на localhost. так что если я пройду

redirect_uri = http: //localhost/test_blog/index.php

он отлично работает, но если я пройду

redirect_uri = http: //localhost/test_blog/index.php? r = site / oauth2

он не хочет работать. я пытаюсь использовать

redirect_uri =. urlencode (' http: //localhost/test_blog/index.php? r = site / oauth2 )

но не работает. я пытаюсь объяснить. я успеваю получить код, но когда я обращаюсь к https://graph.facebook.com/me?access_token, я получаю сообщение об ошибке «Ошибка проверки кода проверки». я проверил evering, ошибка в ? r = site / oauth2, но мне нужно передать некоторые параметры, может кто-нибудь мне помочь? я читаю сообщение http://forum.developers.facebook.net/viewtopic.php?id=70855, но ничего не работает для меня

В настоящее время (по состоянию на март 2011 года) имеются недокументированные требования относительно того, что делает действительным redirect_uri.

Во-первых, оба параметра redirect_uri для авторизации и access_token должны совпадать .

По-видимому, Facebook (или, скорее, OAuth2) использует redirect_uri в качестве внутреннего ключа для кодирования кода, возвращаемого для запроса access_token. Это своего рода умный, так как он проверяет назад на ваш сайт. Это объясняет, почему запрос access_token, который иначе не нуждается в параметре redirect_uri, требует одного.

Во-вторых, вы не можете использовать много специальных символов в redirect_uri .

Много обсуждается, могут ли параметры вообще передаваться. Они могут, вы ограничены, какие символы действительны, но никто не опубликовал список, который я знаю. Традиционные методы, такие как кодировка url / html, не будут выполнены, потому что процент (%) недействителен. Слэш (/) недействителен либо так, что вложенный URL перенаправления всегда будет терпеть неудачу. Единственный способ преодолеть ограничение специального символа – это кодировать значение параметра base64. Если вы используете ASP.NET, найдите Convert.ToBase64.

Наконец, и это скорее примечание. Есть много программистов, проходящих мимо дезинформации, что простым решением является передать тип = client_cred. Это может ограничить ваш доступ к некоторым разрешениям, которые вы запрашивали при авторизации. Это нецелесообразно.

Имела ту же проблему весь день, когда тестирование с redirect_uri=http://localhost:8000 (закодировано до http%3A%2F%2Flocalhost%3A8000 ) …

Решение заключалось просто в том, чтобы поместить конечную косую черту / в конец uri. Итак redirect_uri=http://localhost:8000/ (закодировано до http%3A%2F%2Flocalhost%3A8000%2F ).

Опять же, убедитесь, что redirect_uri идентичен для обоих запросов.

У меня была эта проблема. Я знал, что мои URL-адреса были одинаковыми, потому что я использовал класс с тем же $ var, но я продолжал получать ответ 400 и эту ошибку в ответе JSON.

Единственное, что я сделал, это изменить мой redirect_uri:

 http://myredirecturi.com 

в

 http://myredirecturi.com/ 

Yeh, просто добавил конечную косую черту, и она сработала.

Вам не нужно кодировать, просто положите '/' в конец вашего redirect_url, и все должно быть в порядке!

Часть информации, предоставленной Аароном Уилером, неверна.

Верно, что параметр «redirect_uri» должен быть идентичным в обоих запросах, однако вполне возможно, что URL-адрес будет кодировать обычный URL-адрес и использовать его как значение для параметра «redirect_url», если вы будете осторожны с дальнейшим URL-адресом кодировать любые встроенные URL-адреса.

Например, вы хотите, чтобы facebook перенаправлялся на следующий URL:

 http://www.mysite.com/Users/oAuthComplete?my_param_1=/Party/pants 

Попытка перенаправить пользователя на

 'https://www.facebook.com/dialog/oauth?client_id=12345&redirect_uri=' . urlencode('http://www.mysite.com/Users/oAuthComplete?my_param_1=/Party/pants'); 

Не удалось, поскольку /Party/Pants создает неверный URL-адрес

Однако перенаправление на

 'https://www.facebook.com/dialog/oauth?client_id=12345&redirect_uri=' .urlencode('http://www.mysite.com/Users/oAuthComplete?my_param_1=' .urlencode('/Party/pants')); 

Будет работать так, как ожидалось.

Если вы используете возвращаемое значение redrect_uri во втором, выполните проверку подлинности запроса приложения, убедитесь, что URL-адрес снова закодирован – значение автоматически расшифровывается URL-адресом при заполнении супергеллона $ _GET . – Это то, что сработало.

 'https://graph.facebook.com/oauth/access_token?client_id=12345&&client_secret=SECRET&code=1234567' .urlencode('http://www.mysite.com/Users/oAuthComplete?my_param_1=' .urlencode($_GET['my_param_1'])); 

Ps В вашем фактическом коде я бы рекомендовал использовать sprintf () вместо связывания строки вместе, как в моем примере, для лучшей читаемости.

Из того, что я вижу, проблема здесь в том, что redirect_uri должен заканчиваться на «/» и не содержать «?». или других специальных символов. Я думаю, именно поэтому вы получаете «Ошибка проверки кода проверки». Эта ошибка появляется только в том случае, если вы используете file_get_contents (), а не при использовании библиотеки php facebook. Это решение для php, не знаю, появляется ли эта ошибка в других SDK.

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

 redirect_uri='http://localhost/test_blog/index.php?r='.urlencode('site/oauth2'); 

У меня был pb и, наконец, исправил его, добавив параметр type = client_cred в url.

У меня была такая же проблема.

По общему признанию, я супер n00b, поэтому извините меня, если это решение не имеет никакого смысла в реальной практике.

Я просто установил короткий плавкий предохранитель (1-2 мин) с тестовой переменной на странице с помощью моей кнопки FB Connect. Когда FB вернулась с информацией на мой скрипт синтаксического анализа / обработки данных, я проверил этот куки-файл, где я перенаправлял его, и, если он был найден, направил пользователя на правильный URL-адрес, используя заголовок: location.

Конечно, некоторые браузеры / пользователи и т. Д. Отключают файлы cookie. Это, очевидно, не работает (возможно, использовать сеанс var и уничтожить его в обработчике данных fb?) Я уверен, что есть лучший способ сделать это, но на данный момент эта бандада работает.

Ответ для меня был следующим:

 $user = $facebook->getUser(); if (!$user) { $loginUrl = $facebook->getLoginUrl(array( 'scope' => '', 'redirect_uri' => $this->domain, )); print('<script> top.location.href=\'' . $loginUrl . '\'</script>'); } 

Я долго пробивал себе голову, прежде чем нашел это решение, похоже, что я не единственный, у кого есть эта проблема. Надеюсь, это сработает для вас!

Я заметил, что вы используете Yii, который я использую, и у меня была такая же проблема в течение половины дня. Как уже упоминалось, проблема заключается в специальных символах вашего URL, ie r=site/oath2

Вы можете исправить это, включив симпатичные URL-адреса в свой конфиг, чтобы ваш URL стал index.php/site/oath2

Тем не менее, похоже, что он работает без косой черты.