勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

formにhCaptchaを組み込み、PHPで結果を検証する方法

  PHP

お問い合わせフォーム等でGoogle reCAPTCHAではなくhCaptchaが組み込まれていることが偶にある。聞いたことの無いサービスだったため調べてみるとGoogle以外の独立したCAPTCHAサービスの中では大手らしい。formに組み込んで試してみたいので以下にソースコードをメモ。

 

hCaptcha

公式サイト

https://www.hcaptcha.com/

料金や機能について

プランページよると無料版は「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に代わる無料のツール「Cloudflare Turnstile」の導入方法

CAPTCHAと言えばGoogleのreCAPTCHAを思い浮かべるが、稀にCl ...

formにGoogle reCAPTCHA v3を組み込み、PHPでスコア判定する方法

だいぶ前にGoogle reCAPTCHA v2をformに組み込むという記事を ...

PHPでシンプルな英数字のCAPTCHAを「Gregwar / Captcha」ライブラリで実装する方法

PHPでシンプルなランダム英数字のCAPTCHAを実装したい。「Gregwar ...

CodeIgniter4 & reCAPTCHA でお問い合わせフォームを作成する方法

以前CodeIgniter4.4.4で簡易的なお問い合わせページを作成したが、今 ...

PHPでログインフォームにひらがな認証を設置する方法

ログインフォームに平仮名認証を設置したい。英数字認証だとSecurimageとい ...