reCAPTCHA認証
準備
キー取得
reCAPTCHAのサイト登録のページでキーを取得
https://www.google.com/recaptcha/admin
googleのアドレスでないといけない
xamppで実行する場合のアドレスは「127.0.0.1」
URLもlocalhostでなく127.0.0.1/~でないとエラーとなる
※xamppでもバーチャルホストにてドメインを設定した場合はそのドメインで使用可
実装
クライアント側
<html>
<head>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<script>
function validateRecaptcha ( code ) {
if ( !!code ) {
var form = document.querySelector(".recaptcha");
form.removeAttribute('disabled');
}
}
</script>
</head>
<body>
<form action="server.php" method="post" enctype="multipart/form-data">
<div
class="g-recaptcha"
data-callback="validateRecaptcha"
キー取得で取得したSiteKeyを設定
data-sitekey="XXXXXXXXXXXXXXXXXXXX">
</div>
<input name="test" value="test" />
<input type="submit" name="my_submit" value="送信" id="btnSubmit"
class="recaptcha" disabled />
</form>
</body>
</html>
サーバー側
<?php
クライアント側からのreCAPTCHAパラメータ(SiteKey)を取得
$recaptcha = htmlspecialchars($_POST['g-recaptcha-response'], ENT_QUOTES, 'UTF-8');
if(isset($recaptcha)){
$captcha = $recaptcha;
}else{
$captcha = "";
echo "captchaエラー";
exit;
}
キー取得で取得したSecretKeyを設定
$secretKey = "XXXXXXXXXXXXXXXXXXXX";
SiteKeyとSecretKeyを照合
$resp = @file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secretKey}&response={$captcha}");
$resp_result = json_decode($resp, true);
if(intval($resp_result['success']) !== 1) {
echo('NG');
}else{
echo('OK');
}