Intereting Posts
Упорядочить по дате на первой странице Получайте электронные сообщения от пользователя register в WordPress Вопросы по add_rewrite_rule Использование ob_start () в плагине Тег шаблона не работает в шаблоне страницы почему этот шаблон контента не показывает какие-либо мои записи в блоге? добавить возможность роли автора для удаления вложений Как очистить кэш WordPress от сервера / FTP / удаленного места рамки для панели параметров плагина / темы? Войдите в WordPress, нажав ссылку и указав usernaname и пароль в url Ошибка PHP с коротким кодом: «нет подходящей обертки» для file_get_contents либо single-{custom} .php 404's OR / таксономия / 404's – пользовательский тип сообщения и таксономия permalinks Невозможно загрузить статическую главную страницу на домашнем URL-адресе создать пользовательскую страницу для сбора статистических данных и отчетности Оценка двух планов безопасности WordPress против атаки на PHP-инъекцию

Справка по проверке google recaptcha в пользовательской форме

Я пытаюсь добавить recaptcha в свое настраиваемое поле. Я создал пользовательский шаблон в шаблоне страницы, и это часть моего коэффициента, который я считаю релевантным (не беспокойтесь, что apikey является их публичной демонстрацией MerchantOnes, так что это не личное):

// API Setup parameters $gatewayURL = 'https://secure.merchantonegateway.com/api/v2/three-step'; $APIKey = '2F822Rw39fx762MaV7Yy86jXGTC7sCDy'; // If there is no POST data or a token-id, print the initial shopping cart form to get ready for Step One. if (empty($_POST['DO_STEP_1']) && empty($_GET['token-id'])) { print ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'; print ' <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Hansen Hunter Collect non-sensitive Customer Info</title> </head> <body> <p>We are pleased to offer the option for you to securely pay your Hansen Hunter & Co. invoice online.</p> <h2 class="pad">Invoice Details</h2> <form action="" method="post"> <table> <tr><td><input type="text" name="shipping-address-first-name" placeholder="First Name" required></td></tr> <tr><td><input type="text" name="shipping-address-last-name" placeholder="Last Name" required></td></tr> <tr><td><input type="text" name="shipping-address-company" placeholder="Company" required></td></tr> <tr><td><input type="text" name="billing-address-phone" placeholder="Phone Number" required></td></tr> <tr><td><input type="text" name="billing-address-email" placeholder="Email Address" required></td></tr> <tr><td><input type="text" name="billing-invoice" placeholder="Invoice or Customer Number"></td></tr> <tr><td><input type="text" name="billing-amount" placeholder="Total Amount" required></td></tr> <tr><td><h4><br />Payment Information</h4></td></tr> <tr><td><input type="text" name="billing-address-first-name" placeholder="Cardholder First Name" required></td></tr> <tr><td><input type="text" name="billing-address-last-name" placeholder="Cardholder Last Name" required></td></tr> <tr><td><input type="text" name="billing-address-address1" placeholder="Address" required></td></tr> <tr><td><input type="text" name="billing-address-address2" placeholder="Address 2"></td></tr> <tr><td><input type="text" name="billing-address-city" placeholder="City" required></td></tr> <tr><td><input type="text" name="billing-address-state" placeholder="State" required></td></tr> <tr><td><input type="text" name="billing-address-zip" placeholder="Zip/Postal Code" required></td></tr> <tr><td><input type="text" name="billing-address-country" placeholder="Country" value="US" required></td></tr> <tr><td><div class="g-recaptcha" data-sitekey="6Lc2MiUTAAAAAGJeGAlku50gFi7hFKvIitP_-3e0"></div></td></tr> <tr><td><input type="submit" class="btn pad" value="Continue"><input type="hidden" name ="DO_STEP_1" value="true"></td></tr> </table> </form> '; }else if (!empty($_POST['DO_STEP_1'])) { // Initiate Step One: Now that we've collected the non-sensitive payment information, we can combine other order information and build the XML format. 

Я добавил этот код к своим функциям.php, чтобы добавить google api:

 add_action('wp_head','hook_recaptca'); function hook_recaptca() { $output="<script src='https://www.google.com/recaptcha/api.js'></script>"; echo $output; } 

Это позволяет отображать мой recaptcha. Проблема в том, что это еще не проверяется.

Я знаю, что у меня есть эти 2 части кода, которые нужно добавить:

 /** * Send a GET request to verify CAPTCHA challenge * * @return bool */ function captcha_verification() { $response = isset( $_POST['g-recaptcha-response'] ) ? esc_attr( $_POST['g-recaptcha-response'] ) : ''; $remote_ip = $_SERVER["REMOTE_ADDR"]; // make a GET request to the Google reCAPTCHA Server $request = wp_remote_get( 'https://www.google.com/recaptcha/api/siteverify?secret=your_secret&response=' . $response . '&remoteip=' . $remote_ip ); // get the request response body $response_body = wp_remote_retrieve_body( $request ); $result = json_decode( $response_body, true ); return $result['success']; } 

а также

 /** * Verify the CAPTCHA answer * * @param $user string login username * @param $password string login password * * @return WP_Error|WP_user */ function validate_captcha( $user, $password ) { if ( isset( $_POST['g-recaptcha-response'] ) && !captcha_verification() ) { return new WP_Error( 'empty_captcha', '<strong>ERROR</strong>: Please retry CAPTCHA' ); } return $user; } 

но я не уверен, как их прикрепить (какой крючок использовать?) в моей форме, чтобы пользователь был остановлен, если они не заполняют этот флажок. Я вижу учебники и вопросы о добавлении формы входа в систему или регистрационную форму или комментарии, но не могу понять, как это сделать в моей пользовательской форме.

В случае, если это помогает, это весь php, который купец, поставляемый для их интеграции, находится здесь:

http://pastebin.com/mR5jf5B3

Вам необходимо проверить подлинность reCAPTCHA сразу после отправки формы. Вы просто отправляете POST на ту же страницу, поэтому это должно быть сделано до любой другой обработки.

Если это не подтверждается, вам нужно снова отобразить форму с сообщением об ошибке.

 function recaptcha_validated(){ if( empty( $_POST['g-recaptcha-response'] ) ) return FALSE; $response = wp_remote_get( add_query_arg( array( 'secret' => 'your_secret', 'response' => isset($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : '', 'remoteip' => isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'] ), 'https://www.google.com/recaptcha/api/siteverify' ) ); if( is_wp_error( $response ) || empty($response['body']) || ! ($json = json_decode( $response['body'] )) || ! $json->success ) { //return new WP_Error( 'validation-error', __('reCAPTCHA validation failed. Please try again.' ) ); return FALSE; } return TRUE; } // reCAPTCHA data was POSTed, let's validate it! if( ! empty( $_POST['DO_STEP_1'] ) ){ if( recaptcha_validated() === FALSE ){ $recaptcha_error = TRUE; print '<div class="error message">' . __('reCAPTCHA failed, please try again.') . '</div>'; } } // Because we want to show the form again if there was an error, we first check if error var is set OR if DO_STEP_1 and token-id are empty if ( isset( $recaptcha_error ) || ( empty($_POST['DO_STEP_1']) && empty($_GET['token-id']) ) ) { print '<p>We are pleased to offer the option for you to securely pay your Hansen Hunter & Co. invoice online.</p> <h2 class="pad">Invoice Details</h2> <form method="post"> <table> <tr><td><input type="text" name="shipping-address-first-name" placeholder="First Name" required></td></tr> <tr><td><input type="text" name="shipping-address-last-name" placeholder="Last Name" required></td></tr> <tr><td><input type="text" name="shipping-address-company" placeholder="Company" required></td></tr> <tr><td><input type="text" name="billing-address-phone" placeholder="Phone Number" required></td></tr> <tr><td><input type="text" name="billing-address-email" placeholder="Email Address" required></td></tr> <tr><td><input type="text" name="billing-invoice" placeholder="Invoice or Customer Number"></td></tr> <tr><td><input type="text" name="billing-amount" placeholder="Total Amount" required></td></tr> <tr><td><h4><br />Payment Information</h4></td></tr> <tr><td><input type="text" name="billing-address-first-name" placeholder="Cardholder First Name" required></td></tr> <tr><td><input type="text" name="billing-address-last-name" placeholder="Cardholder Last Name" required></td></tr> <tr><td><input type="text" name="billing-address-address1" placeholder="Address" required></td></tr> <tr><td><input type="text" name="billing-address-address2" placeholder="Address 2"></td></tr> <tr><td><input type="text" name="billing-address-city" placeholder="City" required></td></tr> <tr><td><input type="text" name="billing-address-state" placeholder="State" required></td></tr> <tr><td><input type="text" name="billing-address-zip" placeholder="Zip/Postal Code" required></td></tr> <tr><td><input type="text" name="billing-address-country" placeholder="Country" value="US" required></td></tr> <tr><td><div class="g-recaptcha" data-sitekey="6Lc2MiUTAAAAAGJeGAlku50gFi7hFKvIitP_-3e0"></div></td></tr> <tr><td><input type="submit" class="btn pad" value="Continue"><input type="hidden" name="DO_STEP_1" value="true"></td></tr> </table> </form> '; } 

Есть ли причина, по которой вы не используете плагин типа Caldera Forms вместо полностью настраиваемого кода? Плагин будет обрабатывать большинство из этих вещей для вас, включая вывод на поле HTML, вывод / проверку reCAPTCHA и по-прежнему предоставлять вам действия / крючки, которые можно вызвать при отправке формы, чтобы вы могли обрабатывать пользовательский код:

https://wordpress.org/plugins/caldera-forms/

https://calderawp.com/downloads/caldera-forms-run-action/

https://wordpress.org/plugins/caldera-forms-run-action/