Javascript reCAPTCHA v3-错误:不存在reCAPTCHA客户端

Javascript reCAPTCHA v3-错误:不存在reCAPTCHA客户端,javascript,php,ajax,recaptcha,captcha,Javascript,Php,Ajax,Recaptcha,Captcha,首先,我知道这里已经发现了同样的问题: 但是,由于答案没有引导我找到解决方案,我在这里试试运气 所以我尝试使用reCAPTCHA,因为我从我网页上的表单中收到了很多垃圾邮件。在我的HTML头脑中,我有以下代码: <script src="https://www.google.com/recaptcha/api.js?render=MY_SITE_KEY"></script> <script> grecaptcha.ready(function() { g

首先,我知道这里已经发现了同样的问题: 但是,由于答案没有引导我找到解决方案,我在这里试试运气


所以我尝试使用reCAPTCHA,因为我从我网页上的表单中收到了很多垃圾邮件。在我的HTML头脑中,我有以下代码:

<script src="https://www.google.com/recaptcha/api.js?render=MY_SITE_KEY"></script>
<script>
grecaptcha.ready(function() {
  grecaptcha.execute("MY_SITE_KEY").then(function(token) {
    console.log(token);
  });
});
</script>
最后,在PHP中,我执行以下操作:

<?php

  $secret = "MY_SECRET_KEY";
  $response = $_POST["captcha"];
  $verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}");
  $captcha_success=json_decode($verify);

    if ($captcha_success->success==false) {
      echo "reCaptcha indentified you as a bot. We don't like bots here.";
    }
    else if ($captcha_success->success==true) {

      // MY WHOLE mail() function here

    }

?>

您可以使用以下方法重新实现:

<script src="https://www.google.com/recaptcha/api.js?render=MY_SITE_KEY"></script>
<script>
var grecaptchaSiteKey = 'MY_SITE_KEY';

var _RECAPTCHA = _RECAPTCHA || {};

_RECAPTCHA.init = function() {
    grecaptcha.ready(function() {
        grecaptcha.execute(grecaptchaSiteKey, {action: 'homepage'}).then(function(token) {
            if (jQuery(form)[0]) {
                if (jQuery('.grecaptchaToken')[0]) {
                    jQuery(form).find('.grecaptchaToken').remove();
                }

                jQuery(form).append('<input type="hidden" class="grecaptchaToken" name="grecaptchaToken" value="' + token + '" />');
            }
        });
    });
}

_RECAPTCHA.init();

</script>

var grecaptchaSiteKey='MY_SITE_KEY';
var(u RECAPTCHA=_RECAPTCHA | |{};
_RECAPTCHA.init=函数(){
grecaptcha.ready(函数(){
执行(grecaptchaSiteKey,{action:'homepage'})。然后(函数(令牌){
if(jQuery(form)[0]){
if(jQuery('.grecaptchaToken')[0]){
jQuery(form).find('.grecaptchaToken').remove();
}
jQuery(form).append(“”);
}
});
});
}
_RECAPTCHA.init();
之后,您可以获得隐藏输入的值,并将其放入Ajax负载中


现在,为了避免在第二次提交表单时出错,可以调用_RECAPTCHA.init()方法;在Ajax调用的成功回调中。

您的
grecaptcha.ready(function(){…}
是否将令牌记录到控制台?在浏览器开发控制台中返回的
grecaptcha.getResponse()
是什么?@r3dst0rm是的,记录了令牌。
grecaptcha.getResponse()
没有返回任何内容,您可以将
控制台.log(token)
替换为:
var recaptchaResponse=document.getElementById('recaptchaResponse');recaptchaResponse.value=token;
并将以下输入标记添加到表单中:
?在ajax中,您只需替换
grecaptcha.getResponse()
使用
document.getElementById('RecaptCharResponse').value
——看看它是否有效?如果邮件被发送,我想可以安全地假设验证码检查现在有效。是时候检查邮件函数
grecaptcha.reset()中可能存在的PHP错误了使用
onloadCallback
重置验证码时,
对我不起作用,我只是调用了
onloadCallback()
方法,谢谢。
Uncaught Error: No reCAPTCHA clients exist.
    at Gw (recaptcha__de.js:511)
    at Object.Q5 [as getResponse] (recaptcha__de.js:519)
    at HTMLFormElement.<anonymous> (main.js:265)
    at HTMLFormElement.dispatch (jquery.min.js:3)
    at HTMLFormElement.q.handle (jquery.min.js:3)
<script src="https://www.google.com/recaptcha/api.js?render=MY_SITE_KEY"></script>
<script>
var grecaptchaSiteKey = 'MY_SITE_KEY';

var _RECAPTCHA = _RECAPTCHA || {};

_RECAPTCHA.init = function() {
    grecaptcha.ready(function() {
        grecaptcha.execute(grecaptchaSiteKey, {action: 'homepage'}).then(function(token) {
            if (jQuery(form)[0]) {
                if (jQuery('.grecaptchaToken')[0]) {
                    jQuery(form).find('.grecaptchaToken').remove();
                }

                jQuery(form).append('<input type="hidden" class="grecaptchaToken" name="grecaptchaToken" value="' + token + '" />');
            }
        });
    });
}

_RECAPTCHA.init();

</script>