質問

投稿者:3ato-k
登録日:2026年6月10日(水)

reCAPTCHAの判定について

フォームにreCAPTCHAを設定する https://knowledge.spirers.jp/article/development/detail/2186 上記ナレッジページを参考に、reCAPTCHAの挙動を確認させていただきました。 確認画面にて $result_status = ''; // 結果を表示する文字列を初期化 を実際に画面に表示し、どのような値がかえってくるのかを確認してみたところ、 エラーを出さずに確認画面へ遷移→成功 エラーを出して確認画面へ遷移→失敗 確認画面から戻るボタンで入力画面に遷移し、確認画面へ遷移→失敗 という表示結果となりました。 エラーを出しても戻るボタンで戻っても問題ない(botではない)のであれば「成功」としたいのですが、どうすれば良いでしょうか。

更新日:2026年6月10日(水)
いいね

コメント

  • お問い合わせいただきありがとうございます。 >エラーを出しても戻るボタンで戻っても問題ない(botではない)のであれば「成功」としたいのですが、どうすれば良いでしょうか。 大変申し訳ございません。 記事の内容で設定した場合、SPIRALでは入力値を引き継ぐための指定の「$form:hidden$」がございますが、この影響で確認から戻った際に、前の値と今回の値の配列でチェックしてしまいエラーとなっております。 配列の場合は新しい値でチェックするように修正したコードをご用意いたしました。 大変お手数をおかけしますが記事の「フォーム確認HTMLソースにPHPコードを設置」に該当する部分をコードブロックの内容に差し替えてお試しください。 ※カスタムモジュールの実行時ファイルパスを差し替えてご利用ください。 また、記事も後ほど修正させていただきます。 お手数をおかけしますがご確認よろしくお願いします。

    フォーム確認HTMLソースにPHPコードを設置
    <?php // <!-- SMP_DYNAMIC_PAGE DISPLAY_ERRORS=OFF NAME=confirm --> ?>
    <?php
    require 'test/reCAPTCHA.php';
    // reCAPTCHA サイトキー
    $siteKey = V2_SITEKEY;
    // reCAPTCHA シークレットキー
    $secretKey = V2_SECRETKEY;
    
    $result_status = '';  // 結果を表示する文字列を初期化
    
    if (isset($_POST['g-recaptcha-response'])) {
    
        // 配列なら最後の要素、文字列ならそのまま使用
        $token = $_POST['g-recaptcha-response'];
    
        if (is_array($token)) {
            $token = reset($token);
        }
    
        // cURL セッションを初期化
        $ch = curl_init();
    
        curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify');
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
            'secret'   => $secretKey,
            'response' => $token
        )));
      //curl_execの返り値を文字列にする
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      //転送を実行してレスポンスを $json に格納
        $json = curl_exec($ch);
      //セッションを終了
        curl_close($ch);
    
      //レスポンスの $json(JSON形式)をデコード
        $result = json_decode($json);
    
        if (!empty($result->success)) {
            $result_status = '成功';
        } else {
            $result_status = '失敗:';
    
            if (!empty($result->{'error-codes'})) {
                $result_status .= $result->{'error-codes'}[0];
            }
        }
    print_r($result_status);
    echo '<pre>';
    var_dump($_POST['g-recaptcha-response']);
    echo '</pre>';
    
    }
    • いいね
    2026年6月10日(水)
あなたもログインして、
回答してみませんか?
質問がまとまらない方へ チャットコミュニティで気軽に聞いてみよう! 疑問や課題が整理できていなくても問題ありません。SPIRAL®で解決できる範囲がまだわからなくても質問できます。「ここで聞くと場違いかな?」というお悩みでも歓迎します。
  • Discordで聞く
  • Slackで聞く