服务器端 recaptcha v2 验证

serverside recaptcha v2 validation

我正在尝试实施 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"}

json_decode() 的文档清楚地说明了以下关于它 return 的内容:

Returns the value encoded in json in appropriate PHP type. Values true, false and null are returned as TRUE, FALSE and NULL respectively. NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit.

您不应将 json_decode() 的 return 值与字符串进行比较(在您提供的示例中,'success')。取而代之的是,以正常的方式访问对象内部的值 PHP property getter/setter notation syntax:

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