簡體   English   中英

Google無驗證碼和PHP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM