如何在PHP表单中实现Google Recaptcha v3?

如何在PHP表单中实现Google Recaptcha v3?,php,recaptcha,contact-form,recaptcha-v3,Php,Recaptcha,Contact Form,Recaptcha V3,我想在Recaptcha的新版本(V3)中插入一个联系人表单 我寻找了不同的解决方案,但它们只显示了部分代码,它们不完整,或者我遇到了一个错误,并且找到的大多数解决方案都非常复杂,因为它们非常简单,我不理解代码。我搜索了此论坛和其他论坛,以在我的表单中实现新版本的ReCaptcha(V3)。 我需要知道如何: 用JS插入它 如何用PHP验证它 我的表单中需要哪些新字段 我没有找到任何简单的解决方案,可以向我展示所有这些要点,或者对于那些只想在网站上插入联系人表单的人来说,这太复杂了 最后,考

我想在Recaptcha的新版本(V3)中插入一个联系人表单


我寻找了不同的解决方案,但它们只显示了部分代码,它们不完整,或者我遇到了一个错误,并且找到的大多数解决方案都非常复杂,因为它们非常简单,我不理解代码。

我搜索了此论坛和其他论坛,以在我的表单中实现新版本的ReCaptcha(V3)。 我需要知道如何:

  • 用JS插入它
  • 如何用PHP验证它
  • 我的表单中需要哪些新字段
我没有找到任何简单的解决方案,可以向我展示所有这些要点,或者对于那些只想在网站上插入联系人表单的人来说,这太复杂了

最后,考虑多个解决方案的一些代码部分,我使用了一个简单且可重用的代码,您只需在其中插入相应的键

给你

基本JS代码

<script src="https://www.google.com/recaptcha/api.js?render=your reCAPTCHA site key here"></script>
<script>
    grecaptcha.ready(function() {
    // do request for recaptcha token
    // response is promise with passed token
        grecaptcha.execute('your reCAPTCHA site key here', {action:'validate_captcha'})
                  .then(function(token) {
            // add token value to form
            document.getElementById('g-recaptcha-response').value = token;
        });
    });
</script>

显然,您还必须更改表单的操作,在本例中:

    action = "your_action.php"

在上面的回答中,需要更新这些行,以便能够读取PHP中的响应值:

    $response = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']));

    $response->{'success'}

    $response->{'score'}

谢谢你的贡献!谷歌需要为reCaptcha提供更全面的文档。我花了几个小时试图弄明白为什么我不能让它工作,结果却发现他们没有提到为要添加的令牌添加一个隐藏的表单字段。你能解释一下JS的
行上
{action:'validate_captcha'}
做了什么吗?唯一的其他引用是这个隐藏字段:
。试图调试我的实例,但我不确定这是在做什么。这只是为了添加操作,在这段代码中它什么也做不了。您可以在操作中获得更多信息。使用代码后:我们如何测试recaptcha是否正常工作?
    src="https://www.google.com/recaptcha/api.js?render=your reCAPTCHA site key here"    
    grecaptcha.execute('your reCAPTCHA site key here'
    $secret = 'Your secret key here';
    action = "your_action.php"
    $response = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']));

    $response->{'success'}

    $response->{'score'}