フォームにreCAPTCHAを設定する https://knowledge.spirers.jp/article/development/detail/2186 上記ナレッジページを参考に、reCAPTCHAの挙動を確認させていただきました。 確認画面にて $result_status = ''; // 結果を表示する文字列を初期化 を実際に画面に表示し、どのような値がかえってくるのかを確認してみたところ、 エラーを出さずに確認画面へ遷移→成功 エラーを出して確認画面へ遷移→失敗 確認画面から戻るボタンで入力画面に遷移し、確認画面へ遷移→失敗 という表示結果となりました。 エラーを出しても戻るボタンで戻っても問題ない(botではない)のであれば「成功」としたいのですが、どうすれば良いでしょうか。
コメント
ナレッジ
向上チーム
お問い合わせいただきありがとうございます。 >エラーを出しても戻るボタンで戻っても問題ない(botではない)のであれば「成功」としたいのですが、どうすれば良いでしょうか。 大変申し訳ございません。 記事の内容で設定した場合、SPIRALでは入力値を引き継ぐための指定の「$form:hidden$」がございますが、この影響で確認から戻った際に、前の値と今回の値の配列でチェックしてしまいエラーとなっております。 配列の場合は新しい値でチェックするように修正したコードをご用意いたしました。 大変お手数をおかけしますが記事の「フォーム確認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日(水)