reCAPTCHA в сниппете eForm для создание обратной связи, заказа звонка, оформление заказа товаров на Evolution CMS.
1. Прежде всего нужно получить ключи для сайта (siteKey и secretKey) – здесь
2. Скачиваем готовую PHP библиотеку каптчи здесь: github (Clone or download, Download ZIP)
3. Из архива, вытаскиваем папку src, закачиваем в папку /assets/snippets и переименовываем эту папку в recaptcha
4. Создаем сниппет ReCaptcha
и вставляем в него данный код:
<?php if(!defined('MODX_BASE_PATH')) {die('What are you doing? Get out of here!');} include_once MODX_BASE_PATH.'assets/snippets/recaptcha/autoload.php'; if(!defined('siteKey')) {define('siteKey', 'siteKeyCodestring');} if(!defined('secretKey')) {define('secretKey', 'secretKeyCodestring');} $lang = isset($lang) ? $lang : 'ru'; $text = isset($text) ? $text : 'Вы не подтвердили, что вы не робот!'; unset($_SESSION['veriword']); $script = '<script src="//google.com/recaptcha/api.js?hl='.$lang.'"></script>'; $modx->regClientStartupScript($script); $Recaptcha = new \ReCaptcha\ReCaptcha(secretKey); if(isset($_REQUEST['g-recaptcha-response'])){ $resp = $Recaptcha->verify($_REQUEST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']); if($resp->isSuccess()){ $_SESSION['veriword'] = $_SESSION['eForm.VeriCode']; $_POST['vericode'] = $_SESSION['eForm.VeriCode']; } else { $response = $resp->getErrorCodes(); if(!empty($response)){ $codes=''; foreach ($response as $code) { $codes.= $code; } $_SESSION['veriword'] = 'ReCaptchaErrors : '.$codes; } } } if(!function_exists('setReCaptcha')){ function setReCaptcha(&$fields){ $fields['ReCaptcha']= '<div class="g-recaptcha" data-sitekey="'.siteKey.'"></div>'; return true; } } if(!function_exists('verifyReCaptcha')){ function verifyReCaptcha(&$fields,&$vMsg,&$rMsg,&$rClass){ if($_SESSION['veriword'] !== $_SESSION['eForm.VeriCode']){ $vMsg[] = $text; } return true; } } ?>
5. В темплейты eForm прописываем плейсхолдер [+ReCaptcha+]
в том месте, где хотим ее видеть (если вы используете в темплейтах вызов veriword.php, закройте его комментарием или удалите)
6. Перед вызовом eForm ставим вызов сниппета ReCaptcha [[ReCaptcha]]
, а в вызов самого eForm добавляем параметры:
&vericode=`1` &eFormOnBeforeFormMerge=`setReCaptcha` &eFormOnValidate=`verifyReCaptcha`