ModX Evolution reCAPTCHA для eForm

По порядку:
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="https://www.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 добавляем параметры:
&eFormOnBeforeFormMerge=`setReCaptcha` &eFormOnValidate=`verifyReCaptcha` &vericode=`1`

Пример:

http://cntd-sib.ru/how_oreder_docs.html

Добавить комментарий

Ваш адрес email не будет опубликован.