Не работает reCaptchaV3
Добрый вечер!
Подскажите, пожалуйста, с настройкой 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>
Буду очень благодарен за помощь. Комментарии: 12
&hooks=`spam,email,FormItSaveForm,rcv3`
Вы сперва отправляете письмо, потом сохраняете форму и потом проверяете капчу
Так и думал, что подвох в хуках.
Я так понимаю порядок должен быть такой:
Я так понимаю порядок должен быть такой:
&hooks=`spam,rcv3,email,FormItSaveForm`
Верно?
верно, не уверен только в хуке spam, не применяю его вместе с капчей, остальные в нужном порядке
Благодарю за помощь.
Добрый день. Так же столкнулся с проблемой: после установки 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>
В чем может быть проблема?
Добрый день. Если актуально попробуйте переименовать инпут 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]]" />
тоже столкнулся с такой проблемой пишет
/public_html/core/cache/includes/elements/modsnippet/69.include.cache.php : 35) Поле reCAPTCHA пустое. Пожалуйста, проверьте чанк Formit и консоль браузера.
у меня проблема была в версии рекапчи, ключи от 2, а использовал 3 рекапчу.
Для проверки спама нужна валидация рекапчи:
&validate=`g-recaptcha-response:required`
&validate=`g-recaptcha-response:required`
Это актуально для версии V2, в данном случае валидация не нужна.
я тоже так думал, но без валидации спам на V3 проскакивает
Реально &validate=`g-recaptcha-response:required` спасает от спама? У меня все работает, на сайте никаких ошибок, но Гугл пишет «Мы обнаружили, что ваш сайт не проверяет токены reCAPTCHA. Подробную информацию вы найдете на нашем сайте для разработчиков.»
дело может быть еще в плагине MinifyX, он отрубает www.google.com/recaptcha/api.js?onload=ReCaptchaCallbackV3
Временно сделал так в сниппете rcv3_html
Временно сделал так в сниппете 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;
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.