Blog スタッフブログ

PHP システム開発

[PHP]reCAPTCHA v2の実装

システム開発担当のTFです。

やり方

  • GoogleへreCAPTCHAのサイト登録し、サイトキーとシークレットキーを取得する
  • reCAPTCHAを設定したい画面で、reCAPTCHAの表示設定を行う( 入力=>確認=>処理=>完了 のフォーム場合、確認画面に設定を行う[トークンの有効期限が2分の為] )
  • reCAPTCHA 後の画面で、チェックを行う

サンプル

<!DOCTYPE html>
<html>

	<head>
	
		<!-- reCAPTCHAに必要なjsの読み込み -->
		<script src='https://www.google.com/recaptcha/api.js'></script>
	
	</head>
	<body>
		<form method="POST" action="./send.php">
			
			<!-- フォームの確認 -->
			
			<!-- reCAPTCHAの表示 -->
			<div class="g-recaptcha" data-callback="reCHAPCHACallBack" data-sitekey="サイトキー"></div>
			
			<!-- 送信ボタンをdisabled にしておき、 reCAPTCHA が通ったらdisabledを外す -->
			<button id="sendBtn" disabled type="submit">送信</button>
			
		</form>
		
		<script>
			function reCHAPCHACallBack(code) {
				if(code !== ""){
					$('#sendBtn').removeAttr("disabled");
				}
			}
		</script>
	</body>
	
</html>
<?php

// reCAPTCHA のチェック
if( !checkReCAPTCHA() ){
	// reCAPTCHA の失敗
	exit;
}

// reCAPTCHA の成功
// formの処理実行
	
// reCAPTCHA v2 のチェック
function checkReCAPTCHA()
{
	$recaptcha = htmlspecialchars($_POST["g-recaptcha-response"],ENT_QUOTES,'UTF-8');
	
	if( empty($recaptcha) ) return false;
	
	$secretKey = "シークレットキー";
	
	// reCAPTCHA チェック
	$ret = @file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secretKey}&response={$recaptcha}");
	$result = json_decode($ret,true);
	
	if(intval($result["success"]) !== 1) return false;
	
	return true;
}

?>