Php 服务器端recaptcha v2验证

Php 服务器端recaptcha v2验证,php,recaptcha,Php,Recaptcha,我正在尝试实现Google recaptcha v2,这是一个带有' 我不是机器人,你必须点击图像,例如:消防栓 前端工作正常,但我无法正确获取服务器端代码 我在当前的验证中尝试了这一点,但即使在正确完成recaptcha之后,我仍然会收到我设置的验证错误消息 $secretKey = 'MY_SECRET_KEY'; $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api

我正在尝试实现Google recaptcha v2,这是一个带有' 我不是机器人,你必须点击图像,例如:消防栓

前端工作正常,但我无法正确获取服务器端代码

我在当前的验证中尝试了这一点,但即使在正确完成recaptcha之后,我仍然会收到我设置的验证错误消息

        $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编码的适当PHP类型的值。价值观 true、false和null返回为true、false和null 分别地如果无法解码json或 编码数据比递归限制更深

您不应该将
json\u decode()
的返回值与字符串进行比较(在您提供的示例中,
'success'
)。相反,在法线中访问对象内部的值:


你能在你的问题主体中分享
$responseData
的内容吗?@esqew,当然。我已经更新了这个问题。您将一个对象(看起来是什么)与一个字符串进行比较(
'success'
)有什么特殊原因吗?从
json_decode()
ing得到的响应不太可能是这样一个简单的字符串。我尝试了
if($responseData['success']!='true')){
但它给了我一个服务器错误,这是因为,根据您的示例,
$responseData
应该是一个PHP对象,而不是一个关联数组。您可以使用属性get/set语法来检索
success
属性。啊,好吧。我猜如果(!$responseData->success),我应该将其更改为
因为我只希望验证码未完成时出现验证失败消息?@user8463989没错。我已更新了答案以反映这一小变化。
if(!$responseData->success) {
    $message .= 'Invalid captcha';
}