WEBサイトのフォームにreCAPTCHAを付ける方法 その2

WEBサイトのフォームにreCAPTCHAを付ける方法 その1 の続きです。今回はPHP側の処理について解説します。頑張っていきましょう。こちらのサイトを参考にしました。

環境と目次

  • サーバーサイドはPHPを使用しているものとします。Googleアカウントが必要になります。
  • 1.WEBサイト登録&APIキー確保(前回)
  • 2.クライアント側の設定(HTML)(前回)
  • 3.サーバー側の設定(PHP)
  • 4.クライアント側のオプション設定(JavaScript)(別ページ)
詳細は以下

3.サーバー側の設定(PHP)

今度はPHPをガンガン組んでいきます。完成形はこんな感じです。

testresult.php

認証の仕組みを少しだけ解説

ユーザーがreCAPTCHA認証を突破してからフォームのデータが送信されると、g-recaptcha-responseという名前のパラメータが追加され、送信されます。ユーザーが認証を成功させれば、g-recaptcha-responseの値は謎の文字列になり、認証しないで送信したら、g-recaptcha-responseの値は空になります。この値を利用して、判定作業を行うわけです。 この部分のコードで、g-recaptcha-responseの値を確認し、$recaptchaという変数に入れています。

認証コードが正しいかを判定

さて、g-recaptcha-responseの値を受け取っただけでは、何の認証にもなっていません。正しいかどうかを判定する必要があります。ここでAPIを利用します。今回のPHPコードでは、このシステムが2つの部分に分かれています。 この部分と、 この部分です。まずは前半部分の解説です。 ここでようやく、秘密鍵の出番がきました。貰ってきたSecret keyを"自分のSecret key"の場所にセットしてください。そして、その直後にif文が来ています。今回は、認証コードの正誤判定を、後述する関数に丸投げしています。認証コードがあっていればtrue,認証コードが間違っていればfalseを返すようになっているので、認証成功時・失敗時の処理をここに書けばOKです。

そして、正誤判定を担う関数部分を解説します。

関数の引数に、認証コードと秘密鍵がセットされています。最初のif文(isset($recaptcha_response)の部分)で、認証コードの初期チェックを行い、$codeに代入しています。

そして、リクエストを送るURLを、

で生成しています。ここで認証コードと秘密鍵がセットされます。

後は、判定結果を取得します。そして、JSONで返ってきたきたデータをデコードしたものが$resultに代入され、$result->successに入っている判定結果を見て、適切な返り値(true,false)を返して、判定処理が終了します。

関連記事リスト

このブログを応援する・寄付する

当ブログでは暗号通貨による寄付を募っております。

Bitcoin:

Monacoin:

Litecoin: