①reCAPTCHA V3をPHPのフォームに設置する。
まずこれはなんとか出来ました。
ここを参考にしました。
https://qiita.com/hibara/items/135508a8763873db260b
https://qiita.com/ma7ma7pipipi/items/3d7c59fbefba45e29d82
②reCAPTCHA V3タイムアウトエラーを無視する。
recaptureはフォーム画面を開いてトークンを取得して5分でタイムアウトするみたいなので、そのエラーを無視したいのですが、それが上手くかけませんでした。
どなたかご教授お願いいたします。
ここを参考にしました
https://norando.net/recaptcha-v3_timeout-or-duplicate/
参考を見ながら書いてみたソースコード
html
1<form action="test.php" method="post" name="form"> 2<input type="hidden" name="recaptchaResponse" id="recaptchaResponse" /> 3<button type="submit">submit</button> 4</form> 5 6<script src="https://www.google.com/recaptcha/api.js?render='reCAPTCHA_site_key'"></script> 7<script> 8grecaptcha.ready(function() { 9 grecaptcha.execute('reCAPTCHA_site_key').then(function(token) { 10 var recaptchaResponse = document.getElementById('recaptchaResponse'); 11 recaptchaResponse.value = token; 12 }); 13}); 14</script>
php
1 2if (!empty($_POST['recaptchaResponse'])) { 3 $secret = 'reCAPTCHA_secret_key'; 4 $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['recaptchaResponse']); 5 $reCAPTCHA = json_decode($verifyResponse); 6 7 8if ($reCAPTCHA->score >= 0.7) { 9 // 人間の処理 10} 11else{ 12 $error = $reCAPTCHA->{'error-codes'}; 13 if( count($error) == 1 && $error[0] == 'timeout-or-duplicate' ){ 14 // 人間の処理 15 } 16 //スパムボットの処理 17}
試したこと
上記のコードでは
Warning: count(): Parameter must be an array or an object that implements Countable in...
とエラーが出ました。
あとタイムアウトエラーが回避できませんでした。
あと人間の処理を2回書かなくていい方法があればそれも教えていただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/06 04:59
2021/04/06 05:32
2021/04/06 09:30