Еще один хороший пример того, почему вы не должны отключать какие-либо ошибки при разработке:
Warning: Use of undefined constant success - assumed 'success' (this will throw an Error in a future version of PHP) stackoverflow.php on line 5
В основном это следующая строка:
var_dump($response.success);
, потому что $response
просто string
, а не объект, к полям которого вы могли бы получить доступ.
HTTP-вызов recaptcha возвращает json
, который необходимо сначала проанализировать с помощью функции json_decode
:
$response = json_decode($response,true);
Затем вы можете получить доступ к значению success
через ассоциативный массив:
$response['success']
Что приведет к:
$isValid = false;
if (isset($_POST['g-recaptcha-response'])) {
$captcha = $_POST['g-recaptcha-response'];
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=my_private_key_was_here_&response=" . $captcha);
$response = json_decode($response,true);
$isValid = $response['success'];
}
if (!$isValid) {
echo "Your CAPTCHA response was wrong.";
exit ;
}
, которое также уже оптимизировано потому что он не запускает HTTP-запрос, когда не установлена капча.
Кроме того, вы должны действительно использовать var_dump и печатать материал в своем собственном коде при разработке. Мог бы сэкономить много времени.