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
関連記事
-
-
PHPでシンプルな英数字のCAPTCHAを「Gregwar / Captcha」ライブラリで実装する方法
PHPでシンプルなランダム英数字のCAPTCHAを実装したい。「Gregwar ...
-
-
迷惑メール対策でフォームにGoogle reCAPTCHA v2を導入する方法
お問い合わせフォームのスパムメール対策としてreCAPTCHAを導入したいという ...
-
-
CAPTCHAに代わる無料のツール「Cloudflare Turnstile」の導入方法
CAPTCHAと言えばGoogleのreCAPTCHAを思い浮かべるが、稀にCl ...
-
-
CodeIgniter4 & reCAPTCHA でお問い合わせフォームを作成する方法
以前CodeIgniter4.4.4で簡易的なお問い合わせページを作成したが、今 ...
-
-
formにGoogle reCAPTCHA v3を組み込み、PHPでスコア判定する方法
だいぶ前にGoogle reCAPTCHA v2をformに組み込むという記事を ...