【发布时间】:2018-05-09 12:26:47
【问题描述】:
我正在尝试将 Google 的 reCaptcha V2 植入我的网站(使用 PHP 和 Wordpress 开发)。
我正在尝试验证用户是否在提交之前检查了此验证码。
这是我的验证:
<?php
if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){
$privatekey = $secret;
$captcha = $_POST['g-recaptcha-response'];
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = array(
'secret' => $privatekey,
'response' => $captcha,
'remoteip' => $_SERVER['REMOTE_ADDR']
);
$curlConfig = array(
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => $data
);
$ch = curl_init();
curl_setopt_array($ch, $curlConfig);
$response = curl_exec($ch);
curl_close($ch);
$jsonResponse = json_decode($response);
if ($jsonResponse->success == true) {
$succMsg = 'Your contact request have submitted successfully.';
echo "<script>alert(\"OK\")</script>";
}
else {
$errMsg = 'Robot verification failed, please try again.';
echo "<script>alert(\"KO ROBOT\")</script>";
}
}
else{
$errMsg = 'Please click on the reCAPTCHA box.';
echo "<script>alert(\"KO CLICK ON BOX\")</script>";
}
?>
当我重新加载页面时,或者当我在没有检查验证码的情况下提交时,或者当我检查验证码时,它总是显示:"KO ROBOT"
我也尝试过使用"file_get_contents" 而不是 curl,但我收到了 SSL 错误警告。
谢谢。
更新:
当我这样做时:
var_dump($jsonResponse);
我的页面上有这个:
object(stdClass)#4028 (2) { ["success"]=> bool(false) ["error-codes"]=> array(1) { [0]=> string(20) "invalid-input-secret" } }
更新 2:
现在我有了这个,在验证了我的密钥之后:
object(stdClass)#4028 (2) { ["success"]=> bool(false) [“错误代码”]=> 数组(1){ [0]=> 字符串(20)“超时或重复”} }
【问题讨论】:
-
var_dump($jsonResponse);- 你应该在那里看到错误。 -
你为什么要重新验证?如果
$_POST['g-recaptcha-response']存在,那么它不是机器人,否则是机器人 -
$_POST['g-recaptcha-response'] 的值可以伪造。
-
嘿 @Mr.Blue ,我有一个 var_dump : object(stdClass)#4028 (2) { ["success"]=> bool(false) ["error-codes"]= > 数组(1){ [0]=> 字符串(20)“无效输入秘密”} }
-
如果是这种情况,请使用正确的
secret key。还要在表单中使用正确的site key。
标签: php wordpress captcha verification