WEBサイトのフォームにreCAPTCHAを付ける方法 その2
投稿日:2015年10月04日
最終更新日:
環境と目次
- サーバーサイドはPHPを使用しているものとします。Googleアカウントが必要になります。
- 1.WEBサイト登録&APIキー確保(前回)
- 2.クライアント側の設定(HTML)(前回)
- 3.サーバー側の設定(PHP)
- 4.クライアント側のオプション設定(JavaScript)(別ページ)
3.サーバー側の設定(PHP)
今度はPHPをガンガン組んでいきます。完成形はこんな感じです。testresult.php [PHP]
success)://判定結果を返す return true; else: return false; endif; } ?> [/PHP]
認証の仕組みを少しだけ解説
ユーザーがreCAPTCHA認証を突破してからフォームのデータが送信されると、g-recaptcha-responseという名前のパラメータが追加され、送信されます。ユーザーが認証を成功させれば、g-recaptcha-responseの値は謎の文字列になり、認証しないで送信したら、g-recaptcha-responseの値は空になります。この値を利用して、判定作業を行うわけです。 [PHP] [/PHP] この部分のコードで、g-recaptcha-responseの値を確認し、$recaptchaという変数に入れています。認証コードが正しいかを判定
さて、g-recaptcha-responseの値を受け取っただけでは、何の認証にもなっていません。正しいかどうかを判定する必要があります。ここでAPIを利用します。今回のPHPコードでは、このシステムが2つの部分に分かれています。 [PHP] [/PHP] この部分と、 [PHP] success)://判定結果を返す return true; else: return false; endif; } ?> [/PHP] この部分です。まずは前半部分の解説です。 [PHP] [/PHP] ここでようやく、秘密鍵の出番がきました。貰ってきたSecret keyを"自分のSecret key"の場所にセットしてください。そして、その直後にif文が来ています。今回は、認証コードの正誤判定を、後述する関数に丸投げしています。認証コードがあっていればtrue,認証コードが間違っていればfalseを返すようになっているので、認証成功時・失敗時の処理をここに書けばOKです。そして、正誤判定を担う関数部分を解説します。 [PHP] success)://判定結果を返す return true; else: return false; endif; } ?> [/PHP] 関数の引数に、認証コードと秘密鍵がセットされています。最初のif文(isset($recaptcha_response)の部分)で、認証コードの初期チェックを行い、$codeに代入しています。
そして、リクエストを送るURLを、 [PHP] [/PHP] で生成しています。ここで認証コードと秘密鍵がセットされます。
[PHP] success)://判定結果を返す return true; else: return false; endif; } ?> [/PHP] 後は、判定結果を取得します。そして、JSONで返ってきたきたデータをデコードしたものが$resultに代入され、$result->successに入っている判定結果を見て、適切な返り値(true,false)を返して、判定処理が終了します。
関連記事リスト
- WEBサイトのフォームにreCAPTCHAを付ける方法 その1
- WEBサイトのフォームにreCAPTCHAを付ける方法 その2(このページ)
- WEBサイトのフォームにreCAPTCHAを付ける方法 オプション