2017-03-01 13 views
1

私は自分のフォームを作ろうと必死になっています。recaptcha 2.0 PHPサーバ側の問題

しかし、私は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

のErrを、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

私のテストでは、2つの問題が発生しました。

  1. remoteip引数は任意です。私がそれを取り除くと、すべてがうまくいった。理由は次のとおりです。プライベートIPがファイアウォールの内側にあるため、クライアントマシンとサーバマシンの両方でテストしていたので、サーバの$_SERVER['REMOTE_ADDR']の値は192.168.x.xでした。 Googleは私のNATファイアウォールのパブリックIPを見たので、それは一致するように試みたsiteverifyです。

  2. responseは一度だけ確認できます。再度チェックしようとすると、常に失敗します。だから、テスト中に毎回新しいものを使う必要があります。

また、あなたはあなたのPHPコードを使用してビットを簡素化することができます。
"...siteverify?secret=$secret&response=$recaptcha");

関連する問題