服务器端Recaptcha v2验证

时间:2019-07-11 16:55:27

标签: php recaptcha

我正在尝试实施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 个答案:

答案 0 :(得分:1)

json_decode()的文档中明确说明了以下内容:

  

以适当的PHP类型返回json编码的值。价值观   true,false和null返回为TRUE,FALSE和NULL   分别。如果无法解码json或   编码的数据比递归限制要深。

您不应该将json_decode()的返回值与字符串进行比较(在您提供的示例中,'success')。而是在普通PHP property getter/setter notation syntax中访问对象内部的值:

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