[英]Google No-captcha and 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編寫的。 你可以在這里找到它。
提前致謝。
響應是一個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)
因此,如果響應包含帶有“ missing-input-response”的錯誤代碼,則可以告知用戶未單擊復選框。
我在最近寫的小型庫中實現了無卷毛的No Captcha,所以您可以查看一下是否需要更多詳細信息: https : //github.com/zoran-petrovic-87/ZorAuth
http://zoran87.blogspot.com/2014/12/zorauth-10b-complete-flexible-no.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.