formにhCaptchaを組み込み、PHPで結果を検証する方法
お問い合わせフォーム等でGoogle reCAPTCHAではなくhCaptchaが組み込まれていることが偶にある。聞いたことの無いサービスだったため調べてみるとGoogle以外の独立したCAPTCHAサービスの中では大手らしい。formに組み込んで試してみたいので以下にソースコードをメモ。
目次
hCaptcha
公式サイト
料金や機能について
プランページよると無料版は「100万リクエスト/月まで」使用可能とのこと。
事前準備
公式サイトにてアカウントを作成しログインの上でサイトキー及びシークレットキーを発行しておく。
ソースコード
formページ
<form action="check.php" method="post"> <div class="h-captcha" data-sitekey="【サイトキー】"></div> <input type="submit" value="submit"> </form> <script src='https://www.hCaptcha.com/1/api.js' async defer></script>
認証ページ
<?php $data = array( 'secret' => "【シークレットキー】", 'response' => $_POST['h-captcha-response'] ); $verify = curl_init(); curl_setopt($verify, CURLOPT_URL, "https://hcaptcha.com/siteverify"); curl_setopt($verify, CURLOPT_POST, true); curl_setopt($verify, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($verify, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($verify); if($responseData->success) { //認証成功時の処理 }else{ //認証失敗時の処理 } ?>
リクエスト結果について
上記ソースコードで認証した際「$response」をvar_dumpで確認すると以下のようなリクエスト結果が出力された。
認証成功時
{ "success": true, "challenge_ts": "2024-08-09T05:44:08.000000Z", "hostname": "test.com" }
認証失敗時
{ "success": false, "challenge_ts": "2024-08-09T05:44:18.325660Z", "hostname": null, "error-codes": [ "invalid-or-already-seen-response" ] }
参考サイト
https://medium.com/@hCaptcha/using-hcaptcha-with-php-fc31884aa9ea
関連記事
-
迷惑メール対策でフォームにGoogle reCAPTCHA v2を導入する方法
お問い合わせフォームのスパムメール対策としてreCAPTCHAを導入したいという ...
-
PHPでログインフォームにひらがな認証を設置する方法
ログインフォームに平仮名認証を設置したい。英数字認証だとSecurimageとい ...
-
CodeIgniter4 & reCAPTCHA でお問い合わせフォームを作成する方法
以前CodeIgniter4.4.4で簡易的なお問い合わせページを作成したが、今 ...
-
formにGoogle reCAPTCHA v3を組み込み、PHPでスコア判定する方法
だいぶ前にGoogle reCAPTCHA v2をformに組み込むという記事を ...
-
CAPTCHAに代わる無料のツール「Cloudflare Turnstile」の導入方法
CAPTCHAと言えばGoogleのreCAPTCHAを思い浮かべるが、稀にCl ...