NoCaptcha возвращает ошибку invalid-json
Я интегрировал Googles funky ReCaptcha NoCaptcha в простую форму html5.
На localhost он работает, но при тестировании он всегда возвращает ошибку "invalid-json". Вот часть моего кода:
$secret = 'TEHSEHCRET';
$recaptcha = new \ReCaptcha\ReCaptcha($secret);
$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
if ($resp->isSuccess()) {
// do some
}
else {
print_r($errors = $resp->getErrorCodes());
}
Возвращает Array ( [0] => invalid-json )
Я искал для поиска какую-то помощь, но не нашел ничего полезного.
Так как код on- и offline - это то же самое, я действительно не знаю, откуда эта проблема. https://developers.google.com/recaptcha/docs/verify ничего не говорит о коде ошибки. Угадайте, что решение слишком просто.
Ответы
Ответ 1
Ключом к решению было просто включить php-ошибки (я знаю, это смущает). Это привело к ошибке, которая мешала мне бороться, а также поставила решение в одно и то же время:
У PHP возникли проблемы с подключением к странице проверки https google. Это было просто из-за единственной опции в php.ini: allow_url_fopen
Описание php.net:
allow_url_fopen boolean
Эта опция позволяет оберткам fopen, поддерживающим URL-адреса, которые разрешают доступ Объект URL как файлы. По умолчанию для обеспечения доступа удаленные файлы с использованием протокола ftp или http, некоторые расширения, такие как zlib могут регистрировать дополнительные обертки.
Изменение значения от 0 до 1 решило мою проблему. Показывает еще больше, насколько важно включать php-ошибки при разработке (я супер noob для программирования php)
Надеюсь, это поможет кому-то!
Ответ 2
У меня была такая же проблема и исправлена с помощью cURL в качестве метода запроса вместо POST.
$recaptcha = new \ReCaptcha\ReCaptcha($secret, new \ReCaptcha\RequestMethod\CurlPost());
Ответ 3
ответ - это json-объект. он должен быть сначала декодирован. Я новичок в веб-программировании/разработке, но я успешно интегрировал google recaptcha на тестовом сайте asp.net, который сейчас ничего не делает, но я уверен, что он обрабатывает ответ json именно так, как я хочу.
нашел другую, мог эту помощь.
Ответ 4
Это решило это для меня:
//$recaptcha = new \ReCaptcha\ReCaptcha($secret);
// If file_get_contents() is locked down on your PHP installation to disallow
// its use with URLs, then you can use the alternative request method instead.
// This makes use of fsockopen() instead.
$recaptcha = new \ReCaptcha\ReCaptcha($secret, new \ReCaptcha\RequestMethod\SocketPost());
Ответ 5
//Сделайте вызов, чтобы проверить ответ, а также передать IP-адрес пользователя
$resp = $recaptcha->verify($recaptcha_response, $this->CI->input->ip_address());