###### tags: `wordpress`,`php`,`recaptcha`,`驗證`
# 🔍recaptcha 驗證方法(非外掛)👊
---
## v2 核取方塊

### 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 傳送到後台驗證.驗證成功時,將原本隱藏的送出表單按鈕顯示

### 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);
}
}
```
💬說明:
驗證成功會收到驗證成功,驗證失敗會收到驗證失敗的訊息.