Google No-captcha和PHP

时间:2014-12-10 22:06:08

标签: php html captcha

我正在尝试在我的网站上实施新版本的验证码。

到目前为止我做了什么:

在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

提前致谢。

1 个答案:

答案 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