reCAPTCHA v3 を実装する 2025年版
問題
GoogleのreCAPTCHA v3 を使いたいです。
スパムコメント、いたずらログイン対策に。

答え
準備
ホームページ https://developers.google.com/recaptcha または、
案内ページ https://cloud.google.com/security/products/recaptcha の「使ってみる」から、
新しいサイトを登録する https://www.google.com/recaptcha/admin/create へ進み(ログインが必要)
ドメインを登録して、そのWebサイトで使えるようにするのと、サイトキーとシークレットキーを取得する。

登録後は、この管理画面にて、サイトキー、シークレットを再確認できる。
ブラウザ側実装
ガイドの https://developers.google.com/recaptcha/docs/v3
「チャレンジを自動的にボタンにバインドする」の通りにするのが簡単。
- scriptを読み込む
- フォームの送信ボタンを指定の通りにする。
- ボタンクリック時のコールバック関数作成。
1. JavaScript API を読み込みます。
<script src="https://www.google.com/recaptcha/api.js"></script>
2.トークンを処理するコールバック関数を追加します。
<script>
function onSubmit(token) {
document.getElementById("フォームのIDを書き込む").submit();
}
</script>
3. html ボタンに属性を追加します。
<button class="g-recaptcha"
data-sitekey="ここにサイトキーを書き込む"
data-callback='onSubmit'
data-action='submit'>Submit</button>
サーバー側実装
ガイドの通りにすると $_POST['g-recaptcha-response'] でトークンが送られてくる。
これをGoogleに問い合わせて検証して、結果を得る。
スコア score が得られるので、低い場合は拒否する。以下の例では0.5より大きいとき許可。
<?php
$recaptcha_ok = false;
if (isset($_POST['g-recaptcha-response'])) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'secret' => 'ここにシークレットキーを書き込む',
'response' => $_POST['g-recaptcha-response'],
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$recaptcha_response = curl_exec($ch);
$recaptcha_result = json_decode($recaptcha_response);
curl_close();
if ($recaptcha_result->success && $recaptcha_result->score > 0.5) {
$recaptcha_ok = true;
}
}
if ($recaptcha_ok) {
// 認証成功の処理
// フォームのメール送信など
} else {
// 認証失敗の処理
// エラー画面を返すなど
}
メモ(課金について)
料金が発生するのか気になる方もいると思います。
Webサイトの記載によると無料サービスです。
reCAPTCHA は、スパムや不正行為からサイトを保護する無料のサービスです。高度なリスク分析手法を使用して、人間と bot を区別します。
ただし、月10,000件まで。

メモ
コールバック関数は自由にカスタマイズできるので、「g-recaptcha-response」というパラメータ名にせず、他のhiddenのフィールドでトークンを送信するなどしてもよい。
フォームのsubmitではなく、ajaxな処理で作られている場合などには、grecaptcha.executeでトークンの取得などをする。