2017-03-01 3 views
1

Ich bin verzweifelt versucht, mein Formular funktioniert.Problem mit recaptcha 2.0 PHP-Server Seite

Aber ich habe Probleme mit der Validierung der Recaptcha-Server-Seite.
Ich habe mich tausendmal umgesehen und bin über meine Form gegangen, um Tests zu machen, ich weiß, dass es den Schritt des Recaptcha nicht besteht, aber ich kann es nicht herausfinden.

Hier ist mein Stück Code:

//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']) 

Bitte lassen Sie mich wissen, wenn Sie etwas falsch finden.
Vielen Dank. (in der Tat habe ich meinen Sicherheitsschlüssel entfernt)

+0

Err, ist nicht die Anforderung an den api nehme eine Post-Anforderung sein? – frz3993

+0

was meinst du? – Cenafor

+0

Sie führen eine GET-Anfrage gemäß der [doc] (https://developers.google.com/recaptcha/docs/verify) aus. Die Methode sollte POST sein. – frz3993

Antwort

0

Versuchen Sie dies: $ 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

Ich habe versucht, aber leider ist es immer noch das gleiche: / – Cenafor

1

Bei meinen Tests stieß ich auf zwei Probleme, die Sie möglicherweise haben.

  1. Das Argument remoteip ist optional. Als ich es entfernte, funktionierte alles. Hier ist der Grund: Ich habe sowohl mit Client- als auch mit Server-Computern auf privaten IP-Adressen hinter einer Firewall getestet. Der Wert $_SERVER['REMOTE_ADDR'] auf meinem Server lautet also 192.168.x.x. Google hat die öffentliche IP-Adresse meiner NAT-Firewall gesehen, so dass siteverify versucht wurde, mit dieser übereinzustimmen.

  2. Sie können eine gegebene response nur einmal überprüfen. Wenn Sie versuchen, es erneut zu überprüfen, wird es immer fehlschlagen. Während des Tests müssen Sie also jedes Mal ein neues verwenden.

Auch Sie Ihre PHP-Code ein wenig durch die Verwendung vereinfachen kann:
"...siteverify?secret=$secret&response=$recaptcha");

Verwandte Themen