2017-03-01 101 views
1

我拼命試圖讓我的表單工作。問題與recaptcha 2.0 php服務器端

但我遇到了驗證recaptcha服務器端的問題。
我一直在環顧四周,一遍又一遍地測試我的表格,我知道它沒有通過recaptcha的步驟,但無法弄清楚。

這裏是我的一段代碼:

//variable : 
$recaptcha = $_POST['g-recaptcha-response']; 

//test captcha 
if($recaptcha != '') 
{ 
    $secret = " MY KEY HERE"; 
    $ip = $_SERVER['REMOTE_ADDR']; 
    $var = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip); 
    $array = json_decode($var,true); 

    //check if captcha ok then check fields empty 
    if($array['success']) 

請讓我知道,如果你能發現任何錯誤。
謝謝。 (確實我刪除了我的安全密鑰)

+0

犯錯,不是請求,API假設是POST請求? – frz3993

+0

你是什麼意思? – Cenafor

+0

根據[doc](https://developers.google.com/recaptcha/docs/verify),您正在執行GET請求。該方法應該是POST。 – frz3993

回答

0

試試這個: $ secret =「YOUR-SECRET-KEY」;

$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . $secret . '&response=' . $_POST['g-recaptcha-response']); 
$googleResponse = json_decode($verifyResponse); 
if ($googleResponse->success) 
{ 
    $captchaVerified = true; 
} 
+0

我試過了,但不幸的是它仍然是一樣的:/ – Cenafor

1

在我的測試中,我遇到了兩個你可能遇到的問題。

  1. remoteip參數是可選的。當我刪除它,一切正常。原因如下:我在防火牆後面的私有IP上測試客戶機和服務器機器,因此我的服務器上的$_SERVER['REMOTE_ADDR']值爲192.168.x.x.谷歌看到了我的NAT防火牆的公共IP,所以這是siteverify試圖匹配。

  2. 您只能檢查給定的response一次。如果您嘗試再次檢查它,它總會失敗。所以在測試過程中,你需要每次使用一個新的。

另外,還可以通過簡化你的PHP代碼位:
"...siteverify?secret=$secret&response=$recaptcha");