проверка на сервере recaptcha v2 - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь внедрить Google recaptcha v2 с надписью «Я не робот», и вы должны нажать на изображения, например: пожарный гидрант.

Интерфейс работает правильно, но я не могу получить правильный код на стороне сервера.

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

        $secretKey = 'MY_SECRET_KEY';
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secretKey.'&response='.$_POST['g-recaptcha-response']); 
        $responseData = json_decode($verifyResponse);
        if($responseData !== 'success') {
            $message .= 'Invalid captcha';
        }


        if(!empty($message)) {

            $response['success'] = false;
            $response['message'] = $message;
        } else {

         //success

При записи $ responseData на консоль я получаю:

{success: true, challenge_ts: "2019-07-11T17:11:20Z", hostname: "example.com"}

1 Ответ

1 голос
/ 11 июля 2019

В документах для json_decode() четко указано следующее о том, что он возвращает:

Возвращает значение, закодированное в json в соответствующем типе PHP. Ценности true, false и null возвращаются как TRUE, FALSE и NULL соответственно. NULL возвращается, если JSON не может быть декодирован или если закодированные данные глубже, чем предел рекурсии.

Вы не должны сравнивать возвращаемое значение json_decode() со строкой (в приведенном вами примере, 'success'). Вместо этого получите доступ к значению внутри объекта в обычном синтаксисе getter / setter notation :

if(!$responseData->success) {
    $message .= 'Invalid captcha';
}
...