Не работает reCaptchaV3

Добрый вечер!

Подскажите, пожалуйста, с настройкой reCaptchaV3.
Прописал публичный и секретный ключи.

Форму настроил по инструкции.
Но отправка формы не срабатывает на странице, а спам всё равно проходит.

Вызов формы:
[[!AjaxForm?
            &snippet=`FormIt`
            &form=`AjaxForm.callback`
            &hooks=`spam,email,FormItSaveForm,rcv3`
            &customValidators=`formit2checkfile`
            &emailTo=`[[++publick_email]]`
            &emailFrom=`[[++emailsender]]`
            &emailTpl=`formCallbackTpl`
            &emailFromName=`[[++site_name]]`
            &emailSubject=`Заявка с сайта «[[++site_name]]»`
            &validate=`callbackfio:required:stripTags, callbacktel:stripTags, callbackantispam:maxLength=^0^, callbackmail:required:stripTags, upload:formit2checkfile`
            &submitVar=`callbackbtn`
            &validationErrorMessage=`В форме содержатся ошибки!`
            &successMessage=`Наш менеджер перезвонит вам в ближайшее время.`
            &rcv3Action=`contactform`
        ]]

Сама форма:
<form id="callbackform" enctype="multipart/form-data" method="post" action="">
    <div class="form-group">
        <label class="label">Ваше имя *</label>
        <input name="callbackfio" value="[[!+fi.callbackfio]]" type="text" class="form-control required" placeholder="Ваше имя *" />
    </div>
    <div class="form-group">
        <label class="label">Ваша  почта *</label>
        <input name="callbackmail" value="[[!+fi.callbackmail]]" type="email" class="form-control required email" placeholder="Ваша  почта *" />
    </div>
    <div class="form-group">
        <label class="label">Ваш  телефон</label>
        <input name="callbacktel" value="[[!+fi.callbacktel]]" type="tel" class="form-control tel" placeholder="Ваш телефон" />
    </div>
    <div class="form-group">
        <label class="label">Комментарий</label>
        <textarea class="form-control"  name="callbacktext" value="[[!+fi.callbacktext]]" placeholder="Текст заявки"></textarea>
    </div>
    <div class="form-group">
      <label for="upload">Прикрепить файл</label>
      <input type="file" name="upload">
      <span class="error_upload">[[+fi.error.upload]]</span>
    </div>
    <input type="hidden" name="callbackantispam" value="">
    <br />
    <div class="agreement form-group">
        <input type="checkbox" name="agreement" id="agreement1" class="required">
        <label for="agreement1">
            <i class="material-icons checked">check_box</i> 
            <i class="material-icons no-checked">check_box_outline_blank</i> 
            Согласен на обработку персональных данных *
        </label>
    </div>
    <input name="callbackbtn" type="submit" class="button btn" value="Отправить" />
    
    [[!rcv3_html? &action=`[[+rcv3Action:default=``]]` &error=`[[+fi.error.g-recaptcha-response]]`]]
</form>
Буду очень благодарен за помощь.
Денис
13 мая 2020, 22:17
modx.pro
3 249
0

Комментарии: 12

Евгений Webinmd
13 мая 2020, 22:34
0
&hooks=`spam,email,FormItSaveForm,rcv3`
Вы сперва отправляете письмо, потом сохраняете форму и потом проверяете капчу
    Денис
    13 мая 2020, 22:37
    0
    Так и думал, что подвох в хуках.
    Я так понимаю порядок должен быть такой:
    &hooks=`spam,rcv3,email,FormItSaveForm`
    Верно?
      Евгений Webinmd
      13 мая 2020, 22:39
      0
      верно, не уверен только в хуке spam, не применяю его вместе с капчей, остальные в нужном порядке
        Денис
        13 мая 2020, 22:40
        0
        Благодарю за помощь.
    Maxim Sokolkov
    24 августа 2020, 11:29
    0
    Добрый день. Так же столкнулся с проблемой: после установки recaptcha на странице формы она не выводится, но при попытке отправить сообщение появляется «Поле reCAPTCHA пустое. Пожалуйста, свяжитесь с администратором сайта.» В логах вот такое сообщение: "/public_html/core/cache/includes/elements/modsnippet/101.include.cache.php: 35) Поле reCAPTCHA пустое. Пожалуйста, проверьте чанк Formit и консоль браузера."

    <div class="col-md-6 col-lg-offset-3">
        <div class="box1">
            <div class="rf">
                                [[!AjaxForm?
                                    &snippet=`FormIt`
                                    &form=`AjaxForm.feedback`
                                    &hooks=`rcv3,email`
                                    &emailTo=`[[++emailsender]]`
                                    &emailFrom=`[[++emailfrom]]`
                                    &emailTpl=`formFeedback`
                                    &emailFromName=`[[++site_name]]`
                                    &emailSubject=`Сообщение с сайта «[[++site_name]]»`
                                    &validate=`fio:stripTags, email:email:required, message:required:stripTags:maxLength=^1000^`
                                    &submitVar=`feedbackbtn`
                                    &frontend_css=``
                                    &validationErrorMessage=`В форме содержатся ошибки!`
                                    &successMessage=`Мы свяжемся c вами в ближайшее время.`
                                    &rcv3Action='contactform'
                                ]]
            </div>
        </div>
    </div>

    <form>
        <div class="title-h2" style="margin-bottom:5px;">Обратная связь</div>
        <div class="push10"></div>
        <div class="form-group">
            <input name="children" type="text" class="form-control required" placeholder="ФИО ребенка *" />
        </div>
    	<div class="form-group">
            <input name="parents" type="text" class="form-control required" placeholder="ФИО родителя *" />
        </div>
    	<div class="form-group">
            <input name="sector" type="text" class="form-control required" placeholder="Номер участка *" />
        </div>
        <div class="form-group">
            <input name="tel" type="text" class="form-control required tel" placeholder="Телефон *" />
        </div>
    	<div class="form-group">
            <input name="email" type="email" class="form-control required" placeholder="Email *" />
        </div>
    	<div class="form-group">
            <textarea name="message" class="form-control required" placeholder="Ваше сообщение *"></textarea>
        </div>
        <div class="push20"></div>
    
        <div class="agreement form-group">
            <input type="checkbox" name="agreement" id="agreement1" class="required">
            <label for="agreement1">
                <i class="material-icons checked">check_box</i> 
                <i class="material-icons no-checked">check_box_outline_blank</i> 
                Согласен на обработку персональных данных *
            </label>
        </div>
    
        [[!rcv3_html? 
        &action=`[[+rcv3Action:default=``]]` 
        &error=`[[+fi.error.g-recaptcha-response]]`
        ]]
    
        <p><small><span class="red f16">*</span> - поля, обязательные для заполнения</small></p>
        <input name="feedbackbtn" type="submit" class="btn" value="Отправить" />
    </form>
    В чем может быть проблема?
      Никита
      16 марта 2021, 22:14
      0
      Добрый день. Если актуально попробуйте переименовать инпут email например в contact-email
      &validate=`fio:stripTags, contact-email:email:required, message:required:stripTags:maxLength=^1000^`
      <input name="contact-email" type="email" class="form-control required" placeholder="Email *" value="[[+fi.contact-email]]" />
      алексей
      08 сентября 2020, 14:58
      0
      тоже столкнулся с такой проблемой пишет
      /public_html/core/cache/includes/elements/modsnippet/69.include.cache.php : 35) Поле reCAPTCHA пустое. Пожалуйста, проверьте чанк Formit и консоль браузера.
      у меня проблема была в версии рекапчи, ключи от 2, а использовал 3 рекапчу.
        brioni
        05 января 2021, 12:21
        0
        Для проверки спама нужна валидация рекапчи:
        &validate=`g-recaptcha-response:required`
          Андрей
          05 января 2021, 13:26
          0
          Это актуально для версии V2, в данном случае валидация не нужна.
            brioni
            06 января 2021, 13:17
            0
            я тоже так думал, но без валидации спам на V3 проскакивает
              Sergey
              03 февраля 2021, 16:11
              0
              Реально &validate=`g-recaptcha-response:required` спасает от спама? У меня все работает, на сайте никаких ошибок, но Гугл пишет «Мы обнаружили, что ваш сайт не проверяет токены reCAPTCHA. Подробную информацию вы найдете на нашем сайте для разработчиков.»
          vectorserver
          18 декабря 2023, 07:57
          0
          дело может быть еще в плагине MinifyX, он отрубает www.google.com/recaptcha/api.js?onload=ReCaptchaCallbackV3
          Временно сделал так в сниппете rcv3_html
          <?php
          $public = $modx->getOption('formit.recaptcha_public_key');
          $action = $action ?: 'ajaxform';
          $js = "";
          if (!$modx->getPlaceholder('rcv3_initialized')) {
              $js.='<script src="https://www.google.com/recaptcha/api.js?onload=ReCaptchaCallbackV3&render=' . $public . '" async></script>';
              $js.='
                  <script>
                      var ReCaptchaCallbackV3 = function() {
                          grecaptcha.ready(function() {
                              grecaptcha.reset = grecaptchaExecute;
                              grecaptcha.reset();
                          });
                      };
                      function grecaptchaExecute() {
                          grecaptcha.execute("' . $public . '", { action: "' . $action . '" }).then(function(token) {
                              var fieldsToken = document.querySelectorAll("[name =\'g-recaptcha-response\']");
                              Array.prototype.forEach.call(fieldsToken, function(el, i){
                                  el.value = token;
                              });
                          });
                      };
                      // обновляем капчу каждую минуту
                      setInterval(function() {
                          grecaptcha.reset();
                      }, 60000);
                  </script>
              ';
              $modx->setPlaceholder('rcv3_initialized', 1);
          }
          
          $output = '
              <span class="error_g-recaptcha-response error">' . $error . '</span>
              <input type="hidden" name="g-recaptcha-response">
          ';
          
          return $js.$output;
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            12