recaptcha

    reCAPTCHA для eForm

    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`