WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
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;
}
?>