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']= '';
return true;
}
}
if(!function_exists('verifyReCaptcha')){
function verifyReCaptcha(&$fields,&$vMsg,&$rMsg,&$rClass){
if($_SESSION['veriword'] !== $_SESSION['eForm.VeriCode']){
$vMsg[] = $text;
}
return true;
}
}
?>
5. У темплейти eForm прописуємо плейсхолдер в тому місці, де хочемо її бачити (якщо ви використовуєте в темплейт виклик veriword.php, закрийте його коментарем або видаліть)
6.Перед викликом eForm ставимо виклик сніпета ReCaptcha , а у виклик самого eForm додаємо параметри:
&vericode=`1` &eFormOnBeforeFormMerge=`setReCaptcha` &eFormOnValidate=`verifyReCaptcha`