Recaptcha v3 \AjaxFormS\ formit

Hello. Help me figure out the captcha.
Spam passes through the feedback form
AjaxFormS

[[!AjaxForm?
  &form=`tpl.AjaxForm.example`
  &snippet=`FormIt`
  &hooks=`rcv3,FormItSaveForm,email,spam,validate,chekSpamProtectionMessageKey`
  &emailSubject=`Новое сообщение с сайта [[++site_url]]`
  &emailTo=`site@site.com`
  &emailFrom=`hello@site.ru`
  &emailTpl=`tpl.email`
  &validate=`nospam:blank,name:required,email:required,message:required,phone:required,work-email:blank,s-message:blank` 
  &validationErrorMessage=`В форме содержатся ошибки!`
  &successMessage=`<h2>Сообщение успешно отправлено</h2>`
]]
[[!+fi.successMessage]]


<script language="JavaScript">
   $(function(){
    // Антиспам
    $('.default-form').append('<input type="text" name="org" value="" class="_org" style="visibility:hidden; height: 0; width: 0; padding: 0; border:none;"/>')
    // Антиспам х
})
</script>

tpl.AjaxForm.example

<form id="f1" action="" method="post" class="default-form">
    <input  class="forminpun" type="hidden" name="nospam:blank" value="" />
 <input class="forminpun" type="hidden" name="work-email" value="" />
 <input type="text" class="s-message" style="display:none;" name="s-message" value="" />
 <input type="hidden" name="message-key" value="[[!getMessageKey]]" />

<div class="row clearfix">
<input type="hidden" name="pagetitle" value="[[*pagetitle]]">
<div class="col-lg-6 col-md-6 col-sm-12 form-group">
        <label class="control-label" for="af_name">[[%af_label_name]]</label>
        <div class="controls">
            <input type="text" id="af_name" name="name" value="[[+fi.name]]" placeholder="" class="form-control"/>
            <span class="error_name">[[+fi.error.name]]</span>
        </div>
    </div>

    <div class="col-lg-6 col-md-6 col-sm-12 form-group">
        <label class="control-label" for="af_email">[[%af_label_email]]</label>
        <div class="controls">
            <input type="email" id="af_email" name="email" value="[[+fi.email]]" placeholder="" class="form-control"/>
            <span class="error_email">[[+fi.error.email]]</span>
        </div>
    </div>
 <div class="col-lg-6 col-md-6 col-sm-12 form-group">
 <label class="control-label" for="%af_label_phone">Телефон</label>
        <div class="controls">
            <input type="text" id="af_phone" name="phone" value="[[+fi.phone]]" placeholder="" class="form-control"/>
            <span class="error_phone">[[+fi.error.phone]]</span>
        </div>
                                    </div>
    <div class="col-lg-6 col-md-6 col-sm-12 form-group">
        <label class="control-label" for="af_message">[[%af_label_message]]</label>
        <div class="controls">
            <textarea id="af_message" name="message" class="form-control" rows="5">[[+fi.message]]</textarea>
            <span class="error_message">[[+fi.error.message]]</span>
        </div>
    </div>
	<div class="col-lg-12 col-md-12 col-sm-12 form-group">
	 <label>
      <input type="checkbox" name="soglasie" required=""> Согласен на обработку персональных данных<br/>
      <span class="error">[[+fi.error.opd]]</span>
    </label>
 	<p class="form-text-small">Ставя отметку, я даю  - <a href="[[~17]]" rel="nofollow" target="_blank">согласие на обработку моих персональных данных</a> -  в соответствии с - <a href="[[~16]]" rel="nofollow" target="_blank">Политикой конфиденциальности</a>- и в соответствии с законом N 152-ФЗ «О персональных данных» от 27.07.2006 г.</p>


    </div>

	 <div class="col-lg-12 col-md-12 col-sm-12 form-group message-btn centred">
        <div class="controls">
            <button type="reset" class="theme-btn style-one">[[%af_reset]]</button>
        </div>
    </div>
<div class="col-lg-12 col-md-12 col-sm-12 form-group message-btn centred">
<button type="submit" class="theme-btn style-one">[[%af_submit]]</button>
</div>

    [[+fi.success:is=`1`:then=`
    <div class="alert alert-success">[[+fi.successMessage]]</div>
    `]]
    [[+fi.validation_error:is=`1`:then=`
    <div class="alert alert-danger">[[+fi.validation_error_message]]</div>
    `]]
	 </div>
	 [[!rcv3_html? &action=`[[+rcv3Action:default=``]]` &error=`[[+fi.error.g-recaptcha-response]]`]]

</form>

I have no idea what all these hooks are, but the way hooks work is, that they are executed from left to right. If one hook returns false, the rest of the hooks don’t run.

So in your case a hook like “chekSpamProtectionMessageKey” runs after the “email” hook that sends the mail. That makes no sense.


What exactly is the “rcv3” hook, the “rcv3_html” snippet and the “rcv3Action” placeholder? From what extra?

You need recaptchav3 as a hook and the following in your form.

[[!recaptchav3_render]]
    [[!+fi.error.recaptchav3_error]]

Hello
rcv3 reCaptchaV3 / Утилиты / Дополнения MODX / modstore.pro

validate MODX Revo - Избавиться от спама с FormIt, AjaxForm (без капч)

chekSpamProtectionMessageKey MODX Revo - Избавиться от спама с FormIt, AjaxForm (без капч)

spam Форма обратной связи modx на MODX без спама

Ahh ignore me then, I thought you would be using recaptchav2

Hello. the problem was both v2 and v3 / Where I’m messing up I can’t understand. Put v3/

Just in general:

If you are using extras from the modstore then maybe try the russian MODX forum instead:

I believe there are more people there that have experience with those extras.

There is quite a divide between the extras the russian MODX community frequently uses and the extras that are popular in the west. Often the documentation for modstore extras is only available in russian, so people here mostly stick to what is available from modx.com.

Hello. Tell me, how do you put a captcha?
You mentioned hooks, specify what sequence should be according to your imputation in the code? Maybe that’s the point. I didn’t give it any importance

I have no experience with reCaptchaV3 so I can help you there.


The main point here is, that the order is important.

If you run a spam-protection-hook after the email-hook (&hooks=`email,someSpamProtectionHook`) then the email-hook is always executed.

So do the spam protection first (&hooks=`someSpamProtectionHook,email`) and then send the email. This way, if the spam-protection-hook detects spam, the email isn’t sent.

that is, you are talking about removing everything mine and putting it like this:
[[!AjaxForm?
&form=tpl.AjaxForm.example
&snippet=FormIt
&hooks=someSpamProtectionHook,email,rcv3,FormItSaveForm
&emailSubject=Новое сообщение с сайта [[++site_url]]
&emailTo=site@site.com
&emailFrom=hello@site.ru
&emailTpl=tpl.email
&validate=nospam:blank,name:required,email:required,message:required,phone:required,work-email:blank,s-message:blank
&validationErrorMessage=В форме содержатся ошибки!
&successMessage=

Сообщение успешно отправлено


]]
[[!+fi.successMessage]]

No! I’m just talking about the order of the hooks in general. someSpamProtectionHook is not a real hook. Just an example!

Please read the documentation:

Хуки это скрипты, которые запускаются во время обработки FormIt. Они всегда выполняются в том порядке, в котором они указаны в свойстве. Если, например, у вас есть ловушка электронной почты, за которой следует ловушка проверки, электронное письмо будет отправлено до того, как произойдет проверка. Если какой-либо хук не сработает, последующие за ним не будут выполняться.

Hello. Well, something turned out similar. one spam email in a few days.

[[!AjaxForm?
  &form=`tpl.AjaxForm.example`
  &snippet=`FormIt`
  &hooks=`rcv3,FormItSaveForm,email,spam,validate,chekSpamProtectionMessageKey`
  &emailSubject=`Новое сообщение с сайта [[++site_url]]`
  &emailTo=`sute@sute.com`
  &emailFrom=`sute@sute.ru`
  &emailTpl=`tpl.email`
  &customValidators=`antispam`
  &validate=`nospam:blank,name:required,email:required,message:required,phone:required,work-email:blank,message:antispam,s-message:blank` 
  &validationErrorMessage=`В форме содержатся ошибки!`
  &successMessage=`<h2>Сообщение успешно отправлено</h2>`
]]
[[!+fi.successMessage]]


<script language="JavaScript">
   $(function(){
    // Антиспам
    $('.default-form').append('<input type="text" name="org" value="" class="_org" style="visibility:hidden; height: 0; width: 0; padding: 0; border:none;"/>')
    // Антиспам х
})
</script>
<form id="f1" action="" method="post" class="default-form">
    <input  class="forminpun" type="hidden" name="nospam:blank" value="" />
 <input class="forminpun" type="hidden" name="work-email" value="" />
 <input type="text" class="s-message" style="display:none;" name="s-message" value="" />
 <input type="hidden" name="message-key" value="[[!getMessageKey]]" />

<div class="row clearfix">
<input type="hidden" name="pagetitle" value="[[*pagetitle]]">
<div class="col-lg-6 col-md-6 col-sm-12 form-group">
        <label class="control-label" for="af_name">[[%af_label_name]]</label>
        <div class="controls">
            <input type="text" id="af_name" name="name" value="[[+fi.name]]" placeholder="" class="form-control"/>
            <span class="error_name">[[+fi.error.name]]</span>
        </div>
    </div>

    <div class="col-lg-6 col-md-6 col-sm-12 form-group">
        <label class="control-label" for="af_email">[[%af_label_email]]</label>
        <div class="controls">
            <input type="email" id="af_email" name="email" value="[[+fi.email]]" placeholder="" class="form-control"/>
            <span class="error_email">[[+fi.error.email]]</span>
        </div>
    </div>
 <div class="col-lg-6 col-md-6 col-sm-12 form-group">
 <label class="control-label" for="%af_label_phone">Телефон</label>
        <div class="controls">
            <input type="text" id="af_phone" name="phone" value="[[+fi.phone]]" placeholder="" class="form-control"/>
            <span class="error_phone">[[+fi.error.phone]]</span>
        </div>
                                    </div>
    <div class="col-lg-6 col-md-6 col-sm-12 form-group">
        <label class="control-label" for="af_message">[[%af_label_message]]</label>
        <div class="controls">
            <textarea id="af_message" name="message" class="form-control" rows="5">[[+fi.message]]</textarea>
            <span class="error_message">[[+fi.error.message]]</span>
        </div>
    </div>
	<div class="col-lg-12 col-md-12 col-sm-12 form-group">
	 <label>
      <input type="checkbox" name="soglasie" required=""> Согласен на обработку персональных данных<br/>
      <span class="error">[[+fi.error.opd]]</span>
    </label>
 	<p class="form-text-small">Ставя отметку, я даю  - <a href="[[~17]]" rel="nofollow" target="_blank">согласие на обработку моих персональных данных</a> -  в соответствии с - <a href="[[~16]]" rel="nofollow" target="_blank">Политикой конфиденциальности</a>- и в соответствии с законом N 152-ФЗ «О персональных данных» от 27.07.2006 г.</p>


    </div>

	 <div class="col-lg-12 col-md-12 col-sm-12 form-group message-btn centred">
        <div class="controls">
            <button type="reset" class="theme-btn style-one">[[%af_reset]]</button>
        </div>
    </div>
<div class="col-lg-12 col-md-12 col-sm-12 form-group message-btn centred">
<button type="submit" class="theme-btn style-one">[[%af_submit]]</button>
</div>

    [[+fi.success:is=`1`:then=`
    <div class="alert alert-success">[[+fi.successMessage]]</div>
    `]]
    [[+fi.validation_error:is=`1`:then=`
    <div class="alert alert-danger">[[+fi.validation_error_message]]</div>
    `]]
	 </div>
	 [[!rcv3_html? &action=`[[+rcv3Action:default=``]]` &error=`[[+fi.error.g-recaptcha-response]]`]]

</form>