やわらかしかっけい

なんでもすぐに忘れてしまう自分のために

PHPで作ったフォームにGoogle reCAPTCHAを実装する

メールフォームは たしかこれを使った
www.php-factory.net

reCaptcha

「私はロボットではありません」というやつ
reCAPTCHA: Easy on Humans, Hard on Bots

Googleアカウントにログインした状態で上記にアクセスし、
「reCAPTCHA v2」を選択して登録し、APIキーを取得。

あとは下記サイトに従って、、
liapoc.com

送信ボタンにdisabled属性をつけておくのは、

<div class="g-recaptcha" data-callback="clearcall" data-sitekey="ここにサイトキーをいれる"></div>
<input type="submit" class="submitBtn" name="button" value="送信" disabled>
</form>
 
<script type="text/javascript">
function clearcall(code) {
	if(code !== ""){
	$(':submit[name=button]').removeAttr("disabled");
	}
}
</script>

この部分ですね。recaptchaにdata-callback="clearcall"というのをつけておいて、
jQueryで外してあげると。

disabledのCSSは以下のように

input.submitBtn:disabled{
	background-color: #aaa;
	cursor:not-allowed;
}

追記

php上記サイトのやつだと動かなかったので、以下のやり方で

<?php
function checkReCaptcha(){
    $url = "https://www.google.com/recaptcha/api/siteverify";
    $request = implode("&", [
        "secret=".urlencode("シークレットキー"),
        "response=".urlencode($_POST["g-recaptcha-response"])
    ]);
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response);
}
$gResponse = checkReCaptcha();
if ( $gResponse->success ) {
	//メール送る
}else{
	//エラー
}
?>

参考
mofg.net