###### tags: `wordpress`,`php`,`recaptcha`,`驗證` # 🔍recaptcha 驗證方法(非外掛)👊 --- ## v2 核取方塊 ![](https://i.imgur.com/cO9ksup.png) ### form.php ```php= <form> <div class="g-recaptcha" data-sitekey="XXXXXXXXXXXXXXXXXXXXXXX" data-callback="verifyCallback" data-expired-callback="expiredCallback"></div> <!-- data-sitekey 是申請的 sitekey;data-callback 是打勾時需執行的 function --> </form> <!-- 必要 js --> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <!-- 驗證程序 執行的 function --> <script> const postPostSubmit = document.querySelector('#postPost .submit'); function verifyCallback(token) { var formData = new FormData(); formData.append("action", "verify"); formData.append('token', token); jQuery.ajax({ type: "POST", url: DHHU_vars.ajaxurl, data: formData, // dataType: "json", enctype: "multipart/form-data", cache: false, processData: false, contentType: false, success: function(res) { console.log(res); postPostSubmit.classList.add('active'); }, fail(res) { console.log(res); }, }); } function expiredCallback(token) { postPostSubmit.classList.remove('active'); } </script> ``` 💬說明: A.data-sitekey 是申請的 sitekey;data-callback 是打勾時需執行的 function;expiredCallback 是過期時會執行的 function B.使用 ajax 將 token 傳送到後台驗證.驗證成功時,將原本隱藏的送出表單按鈕顯示 ![](https://i.imgur.com/UFVfWvW.png) ### functions.php ```php= <php add_action('wp_ajax_verify', 'verify'); add_action('wp_ajax_nopriv_verify', 'verify'); function verify() { $recaptcha_secret = "XXXXXXXXXXXXXXXXXXXXXXX";//申請的密鑰 $recaptcha_response = $_POST['token']; $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify'; $recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response); $recaptcha_result = json_decode($recaptcha); if ($recaptcha_result->success == true) { // 驗證成功,繼續處理表單 $message = '驗證成功'; $set_word = 'right'; // 建立 ajax 回傳檔案內容 $array_result = array( 'success' => true, 'word' => $set_word, 'message' => $message, ); wp_send_json($array_result); // wp_die(); } else { // 驗證失敗, $message = '驗證失敗'; $set_word = 'wrong'; // 建立 ajax 回傳檔案內容 $array_result = array( 'success' => false, 'word' => $set_word, 'message' => $message, ); //error_log(print_r($array_result, 1)); wp_send_json($array_result); } } ``` 💬說明: 驗證成功會收到驗證成功,驗證失敗會收到驗證失敗的訊息.