こんにちは皆さん、Google reCaptchaに問題があります。
ここに私のPHPコードがあります:
$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
}
print_rの入力は、Array([success] => [error-codes] => Array([0] => missing-input-response))
この問題を解決するには?
答えてくれてありがとう
ご注意ください : g-recaptcha-respone
!= g-recaptcha-response
Google reCatcha APIでは、file_get_contents
関数呼び出し、SSL専用のコンテキストオプションの設定(サイトにSSLがある場合)。
// If submitted check response
if ($_POST["g-recaptcha-response"]) {
// Input data
$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
}
少なくともubuntuでは-サイトに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とパスは
capath=/etc/ssl/certs/
cafile=/etc/ssl/certs/cacert.pem
私の場合、2つの追加パラメーター('', '&'
)この呼び出しで:
http_build_query(array(
'secret' => $secret,
'response' => $response,
'remoteip' => $remoteip
), '', '&');
コメントすることができないので、ここで答えます。完全に機能するコードをコピーしました。そして、$ _ 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));
}
これに注意してください。POST GETではなくすべてのパラメーターを送信する必要があります( https://developers.google.com/recaptcha/docs/verify#api_request)を参照 )。cURLのようなものを使用して、リクエストを行いやすくします。