我正在尝试在我的网站上实施新版本的验证码。
到目前为止我做了什么:
在FORM中:
echo '<div class="g-recaptcha" data-sitekey="XXXXXXXXXXXXXXXXXXXXXXXXXXXX"></div>';
PHP内部:
$recaptcha = $_POST['g-recaptcha-response'];
if(!empty($recaptcha))
{
$google_url = "https://www.google.com/recaptcha/api/siteverify";
$secret = 'YYYYYYYYYYYYYYYYYYYYYYYYYYY';
$ip = $_SERVER['REMOTE_ADDR'];
$url = $google_url."?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip;
$res = getCurlData($url);
$res = json_decode($res, true);
if($res['success'] == 'false')
{
$captcha_error = "Please re-enter your reCAPTCHA.";
}
}
getCurlData函数:
function getCurlData($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16");
$curlData = curl_exec($curl);
curl_close($curl);
return $curlData;
}
我想要达到的目的是区分何时选中no-Captcha框。如果他/她没有检查该框,我想向用户抛出错误。
到目前为止,如果Google的回复是“我们不确定您是否是人类,请继续进行我们的第二级验证”[if($ res ['success'] =='false') )。
PS:大部分代码都是由Srinivas Tamada编写的。你可以找到它here。
提前致谢。
答案 0 :(得分:1)
响应是一个JSON对象:
{
"success": true|false,
"error-codes": [...] // optional
}
https://developers.google.com/recaptcha/docs/verify
如果你解析那个JSON,你会得到这样的东西:
object(stdClass)[1]
public 'success' => boolean false
public 'error-codes' =>
array (size=1)
0 => string 'missing-input-response' (length=22)
因此,如果响应中包含错误代码,并且输入响应为&#39;你可以告诉用户没有点击复选框。
我在最近写的小型库中实现了没有卷曲的No Captcha,所以如果你想了解更多细节,你可以查看它: https://github.com/zoran-petrovic-87/ZorAuth
http://zoran87.blogspot.com/2014/12/zorauth-10b-complete-flexible-no.html