2014-12-10 70 views
1

我想在我的网站上实现新版本的验证码。谷歌没有验证码和PHP

我做了这么远:

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; 
} 

我想什么

表单内达到是区分何时不检查验证码盒。如果他/她没有选中该框,我想向用户抛出一个错误。

到目前为止,如果Google的回复是“我们不确定您是否是人类,请继续进行我们的第二级验证”,那么我只会抛出一个错误[if($ res ['success'] =='false “)]。

PS:大部分代码是由Srinivas Tamada编写的。你可以找到它here

在此先感谢。

回答

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) 

所以,如果响应包含错误代码'缺少输入响应',你可以告诉用户没有点击复选框。

我实现了无验证码不小图书馆卷曲我最近写了,这样你就可以检查出来,如果你想了解更多详细信息: https://github.com/zoran-petrovic-87/ZorAuth

http://zoran87.blogspot.com/2014/12/zorauth-10b-complete-flexible-no.html