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());