2017-02-19 10 views
2

こんにちは、私はGoogleのreCaptchaに問題があります。ここRecaptcha missing-input-response

は私のPHPコードである:ますprint_rの

$secret = 'SECRET_KEY'; 
      $response = $_POST['g-recaptcha-respone']; 
      $remoteip = $_SERVER['REMOTE_ADDR']; 

      $url = "https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$remoteip"; 
      $result_json = file_get_contents($url); 
      $resulting = json_decode($result_json, true); 
      print_r($resulting); 

if($resulting['success']) { 
    //Success 
} 

入力される:配列([成功] => [エラーコード] =>配列([0] =>欠落入力応答))

この問題を解決するにはどうすればよいですか?

お返事ありがとう

答えて

4

ご注意:!あなたがのために特別にコンテキストオプションを設定し、file_get_contents関数呼び出しに追加のパラメータを指定する必要がありますg-recaptcha-responeを= g-recaptcha-response

enter image description here

enter image description here

GoogleのreCatchaのAPI SSL(サイトにSSLがある場合)。少なくともUbuntuで

// if submitted check response 
if ($_POST["g-recaptcha-response"]) { 

$secret = 'SECRET_KEY'; 
$response = $_POST['g-recaptcha-response']; 
$remoteip = $_SERVER['REMOTE_ADDR']; 

$url = "https://www.google.com/recaptcha/api/siteverify"; 

$post_data = http_build_query(
    array(
     'secret' => $secret, 
     'response' => $response, 
     'remoteip' => $remoteip 
    ) 
); 

$options=array(

    // If site has SSL then 
    'ssl'=>array(

     // In my case its /etc/ssl/certs/cacert.pem 

     'cafile'   => '/path/to/cacert.pem', 
     'verify_peer'  => true, 
     'verify_peer_name' => true, 
    ), 

    'http' => 
    array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded', 
     'content' => $post_data 
    ) 
); 

$context = stream_context_create($options); 

$result_json = file_get_contents($url, false, $context) 
$resulting = json_decode($result_json, true); 

if($resulting['success']) { 
    //Success 
} 

}else 
{ 
    // action for no response 
} 

- サイトはSSL

cd /usr/local/share/ca-certificates 
sudo curl http://curl.haxx.se/ca/cacert.pem -o cacert.crt 
sudo update-ca-certificates 
sudo update-ca-certificates –fresh 

を持っており、あなたのcafileとパスが(私は2つの追加のパラメータを追加する必要が私の場合は

capath=/etc/ssl/certs/ 
cafile=/etc/ssl/certs/cacert.pem 
+0

私は自分のウェブサイトにSSLを持っていないので、$ options = arrayに入れるのは何ですか?または$文脈に? – Forlis

+1

@Forlis:私の更新を見て、 's'が足りませんか? 'g-recaptcha-response'の –

+1

はい、それは仕事です。多くのTy! – Forlis

0

私はここに答えるつもりです。私は完全に動作する私のコードをコピーしました。とbtw、$ _POST ['g-recaptcha-respone']、あなたの入力名は 'g-recaptcha-respone'ですか?

$secret = 'SECRET-KEY'; 
$response = $_POST['g-recaptcha-response']; 
$ip = $_SERVER['REMOTE_ADDR']; 

$dav = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$response."&remoteip=".$ip); 

$res = json_decode($dav,true); 

if($res['success']) { 
    die(json_encode(0)); 
} else { 
    die(json_encode(1)); 
} 
0

になる場合'', '&')の電話番号:

http_build_query(array(
    'secret' => $secret, 
    'response' => $response, 
    'remoteip' => $remoteip 
), '', '&');