Php Recaptcha V3不总是返回分数和结果

Php Recaptcha V3不总是返回分数和结果,php,recaptcha,recaptcha-v3,Php,Recaptcha,Recaptcha V3,最近,我尝试在我们的一个网站表单上实现Recaptcha V3,但遇到了一个错误,它不允许某些用户提交表单,因为表单返回时会显示以下代码中的错误消息“您已被检测为机器人…” 我将所有提交的表单打印到一个日志文件中,每次失败,$recaptcha->success,$recaptcha->action和$recaptcha->分数总是空的 我发现它通常对用户有效并发送消息 我自己测试了表单,大部分时间它都正常工作,但我注意到如果我不断尝试提交表单几次,它会偶尔失败并返回错误。失败时,$recapt

最近,我尝试在我们的一个网站表单上实现Recaptcha V3,但遇到了一个错误,它不允许某些用户提交表单,因为表单返回时会显示以下代码中的错误消息“您已被检测为机器人…”

我将所有提交的表单打印到一个日志文件中,每次失败,$recaptcha->success,$recaptcha->action和$recaptcha->分数总是空的

我发现它通常对用户有效并发送消息

我自己测试了表单,大部分时间它都正常工作,但我注意到如果我不断尝试提交表单几次,它会偶尔失败并返回错误。失败时,$recaptcha->success、$recaptcha->action和$recaptcha->分数始终为空

我还注意到,在这些情况下,$\u POST['recaptcha\u response']似乎是空的,即使它通过了第一个isset if语句

//verify google captcha v3
if(isset($_POST['recaptcha_response'])){
    //build request
    $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
    $recaptcha_secret = 'MY_SECRET_KEY';
    $recaptcha_response = $_POST['recaptcha_response'];

    //get verify response data
    $ch = curl_init();

    curl_setopt_array($ch, [
        CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => [
            'secret' => $recaptcha_secret,
            'response' => $recaptcha_response
        ],
    CURLOPT_RETURNTRANSFER => true
    ]);

    $output = curl_exec($ch);
    curl_close($ch);

    $recaptcha = json_decode($output);


    // Take action based on the score returned:
    if ($recaptcha->success && $recaptcha->action == 'reportadvert' && $recaptcha->score > 0.1){            
        // Verified - success
        $save['captcha'] = "1";
    } else {
        // Not verified - show form error
        $errors['captcha'] = "You have been detected as a bot and blocked from sending this report for security reasons, please try again shortly or Contact us if you are still having issues.";
    }
} else {
     $errors['captcha'] = "You have been detected as a bot and blocked from sending this report for security reasons, please try again shortly or Contact us if you are still having issues.";
}  
这是我的表单(删除了一些其他字段)。请注意,我的表单/页面包含在一个php脚本中,我将表单发布到同一个php脚本中:

<form method="post">
  <input type="hidden" name="recaptcha_response" id="recaptchaResponse">

  <button type="submit" name="SendEm">Report Advert</button>
  <input type="hidden" name="submitted" value="TRUE" />
</form>

报告广告
我将javascrit包含在页面顶部,发布此内容时已删除我的站点密钥:

<script src="https://www.google.com/recaptcha/api.js?render=MY_SITE_RECAPTCHA_KEY"></script>

grecaptcha.ready(function() {
    grecaptcha.execute('MY_SITE_RECAPTCHA_KEY', {action: 'reportadvert'}).then(function(token) {
    var recaptchaResponse = document.getElementById('recaptchaResponse');
    recaptchaResponse.value = token;
   });
});

grecaptcha.ready(函数(){
执行('MY_SITE_RECAPTCHA_KEY',{action:'reportadvert'})。然后(函数(令牌){
var recaptchaResponse=document.getElementById('recaptchaResponse');
recaptchaResponse.value=令牌;
});
});

我会在siteverify响应中检查错误代码。如果出现错误,您将不会得到操作评分参数的响应


,我将在siteverify响应中检查错误代码。如果出现错误,您将不会得到操作评分参数的响应


我尝试将我的按钮html标记更改为input type=“submit”标记,但有时提交表单时,$\u POST['recaptcha\u response']仍然返回为空。我已经确定所有其他表单字段都可以在post参数中使用。到目前为止,由于某些原因,“recaptcha_response”字段没有偶尔设置。为了以防万一有人看到这一点,我从未设法解决过$u POST['recaptcha_response']为空的问题。最后,我不得不改为设置Recaptcha V2,这很好。我尝试将我的按钮html标记更改为input type=“submit”标记,但有时提交表单时,$\u POST['Recaptcha\u response']仍然返回为空。我已经确定所有其他表单字段都可以在post参数中使用。到目前为止,由于某些原因,“recaptcha_response”字段没有偶尔设置。为了以防万一有人看到这一点,我从未设法解决过$u POST['recaptcha_response']为空的问题。最后,我不得不设置Recaptcha V2,这很好。