2014-12-10 69 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