勉強したことのメモ

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

  関連記事

reCAPTCHA v2でAjaxは使わずにチェック状況を確認する方法
reCAPTCHA v2でAjaxは使わずにチェック状況を確認する方法

reCAPTCHA v2を実装する案件があり以前の記事を参考に組み込んでみたもの ...

迷惑メール対策でフォームにGoogle reCAPTCHA v2を導入する方法
迷惑メール対策でフォームにGoogle reCAPTCHA v2を導入する方法

お問い合わせフォームのスパムメール対策としてreCAPTCHAを導入したいという ...

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

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

CAPTCHAに代わる無料のツール「Cloudflare Turnstile」の導入方法
CAPTCHAに代わる無料のツール「Cloudflare Turnstile」の導入方法

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

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

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