我有一个 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/