php - Recaptcha V2.0 始终返回 bool(false)

标签 php html recaptcha

我有一个 Recaptcha V2.0 总是返回 false 或 bool(false) 的问题。感觉它没有通过正确的 key 进行验证,但我已经四重检查了我添加的域和我在代码中使用的 key 。也许我只是在代码方面做了一些错误的事情。

HTML 表单:

<form method="post" action="/php/emailCode.php">
        Your Name <label><input type="text" name="name"></label>
        <br/>
        Email Address <label><input type="text" name="email"></label>
        <br/>
        Message <label><textarea name="message"></textarea></label>
        <br />
        <div id="captcha" data-sitekey="xxxxxxxxxxxxxxxxxxxxxxx"></div>
        <br />
        <input id="submitButton" type="submit">
    </form>
    <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>

PHP:

<?php
if(isset($_POST['g-recaptcha-response']) && $_POST['g-recaptcha-response']){
    $secret = "xxxxxxxxxxxxxxxxxx";
    $ip = $_SERVER['REMOTE_ADDR'];
    $captcha = $_POST['g-recaptcha-response'];
    $rsp  = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=" . $secret . "&response=" . $captcha . "&remoteip=" . $ip);

    var_dump($rsp);
    $arr = json_decode($rsp);
    if($arr->success === true){
        $EmailFrom = "example@example.com";
        $EmailTo = "example@gmail.com";
        $Subject = $_POST['email'];
        $Name = $_POST['name'];
        $Message = $_POST['message'];

        // prepare email body text
        $Body = "";
        $Body .= "Name: ";
        $Body .= $Name;
        $Body .= "\n";
        $Body .= "Message: ";
        $Body .= $Message;
        $Body .= "\n";

        // send email
        $success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");
    }else{
        echo 'Failure';
    }

}

我也在头上运行这个:

<script type="text/javascript">
    var onloadCallback = function() {
        grecaptcha.render('captcha', {
            'sitekey' : 'xxxxxxxxxxxxxxxxxxxxxx'
        });
    };
</script>

我完全不知道为什么它会返回 false。 提前感谢您的帮助!

最佳答案

在 recaptcha 中你有两个 key :

站点 key 在您的网站为用户提供的 HTML 代码中使用它。

key 使用它在您的网站和 Google 之间进行通信。一定要保密。

所以在我的例子中,问题是出于某种原因我在客户端和服务器端使用了一个 key ,这是错误的。您有一个用于 html 表单(客户端)的 key (即 SITE KEY),另一个用于服务器端。 (这是 secret key )

转到 https://www.google.com/recaptcha/admin#list 然后点击您的网站 并阅读“将 reCAPTCHA 添加到您的站点

编辑: 在你的客户端:

  .
  ..
  ...
  <div id="captcha" data-sitekey="SITE KEY"></div>
  ...
  ..
  .

在你的服务器端:

.
..
...
$secret = "SECRET KEY";
...
..
.

关于php - Recaptcha V2.0 始终返回 bool(false),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33403336/

相关文章:

php - 如何在MySQL更新记录上使用substr?

php - 生成所有可能的二进制组合

php - 使用 javascript 获取最后添加的字段数

java - 用于验证 reCaptcha 的正确 URL

php - 我可以使用 isset() 来控制 mysql 查询的执行吗

php - SSL23_GET_SERVER_HELLO :sslv3 alert handshake failure Paypal adaptive payment

jquery - 鼠标悬停时图像弹出

html - 为什么负 z-index 会移除非静态定位元素的悬停功能?

forms - Angular2 表单禁用提交

javascript - preventDefault() 后未正确发送 POST 数据 - 新 Google 的隐形 reCAPTCHA 相关