フォームからAjaxで通信して、reCAPTCHA v3のスコアによって
humanかbotの文字列を返して、alertで出力したいのですがうまくいかないです…。
アドバイスをいただけないでしょうか。
html
1<form id="contact-form" action="/" method="POST"> 2 <input type="hidden" name="recaptchaResponse" id="recaptchaResponse" /> 3 <input class="btn-send" type="button" name="send" value="SUBMIT"> 4</form>
ajax
1$(function() { 2 3 $('.btn-send').on('click', function(e){ 4 e.preventDefault(); 5 6 //reCAPTCHA 7 grecaptcha.ready(function() { 8 grecaptcha.execute('my_key_here', {action: 'homepage'}).then(function(token) { 9 var recaptchaResponse = document.getElementById('recaptchaResponse'); 10 recaptchaResponse.value = token; 11 }); 12 }); 13 14 //ajax 15 var formData = $('#contact-form'); 16 $.ajax({ 17 url: "/", 18 type: "POST", 19 data: formData.serialize() 20 }) 21 .then( 22 23 function (data) { 24 //ここにphpからhumanまたはbotの文字列を受け取ってアラートで出したいです。 25 alert(data); 26 }, 27 function () { 28 alert("fail"); 29 }); 30 } 31});
php
1if (isset($_POST['recaptchaResponse']) && !empty($_POST['recaptchaResponse'])) { 2 $secret = 'my_key_here'; 3 $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['recaptchaResponse']); 4 $reCAPTCHA = json_decode($verifyResponse); 5 if ($reCAPTCHA->score >= 0.7) { 6 echo 'human'; 7 exit; 8 } else { 9 echo 'bot'; 10 exit; 11 } 12}
あなたの回答
tips
プレビュー