Skip to content

Функция-обёртка над отправкой формы с яндекс капчей

Notifications You must be signed in to change notification settings

Sof7ik/yandex-captcha

Repository files navigation

Функция-обёртка над обработчиком отправки формы

Используется для работы Yandex SmartCaptcha. Принимает в себя два параметра:

  1. form - DOMElement формы.
  2. sendHandler - Callback, который будет вызван после проверки токена на стороне сервера

Нужно вызывать для каждой формы на сайте, которая использует Яндекс SmartCaptcha. В переданном form функция при вызове сама создает

<input type="hidden" name="captcha-widget-id" value="<ID_ВИДЖЕТА_КАПЧИ>">

Этот скрытый инпут нужен для идентификации того, на каком контейнере вызывать метод window.smartcaptcha.execute(<ID_ВИДЖЕТА_КАПЧИ>)

Документация к функции

Использование

  1. В файле mediamint_yandexCaptchaWrapper.js указать свои параметры:

    • <КЛЮЧ_КЛИЕНТА> в функции initYandexCaptcha()
    • <ПУТЬ_К_ВАЛИДАТОРУ_КЛЮЧА_СЕРВЕРА> в функции validateYandexCaptchaToken()
  2. Подключить API капчи и файл

  • 1С-Битрикс
<?php
// ...
use Bitrix\Main\Page\Asset;
$asset = Asset::getInstance();

// Yandex Captcha
$asset->addJs("https://smartcaptcha.yandexcloud.net/captcha.js?render=onload&onload=initYandexCaptcha");

$asset->addJs(SITE_TEMPLATE_PATH."/mediamint_yandexCaptchaWrapper.js");
  • HTML
<head>
   ...
   <script src="https://smartcaptcha.yandexcloud.net/captcha.js?render=onload&onload=initYandexCaptcha" defer></script>
   <script src="<path_to_folder>/mediamint_yandexCaptchaWrapper.js"></script>
</head>
  1. На странице сайта форма должна иметь следующий вид:
<!-- 
ID формы используется только для её получения в качестве DOMElement-а, 
можно указывать удобный Вам 
-->
<form action="" method="POST" id="callback-form">
   <!-- ... -->
   
    <!-- Контейнер для отрисовки капчи  -->
   <div data-yandex-captcha></div>
</form>
  1. В JavaScript файле страницы
// Отправка формы через fetch и сохранение данных
async function sendForm(form) {
    // ...
}

document.addEventListener("DOMContentLoaded", () => {
    // получение DOMElement формы с id=callback-form
    // Пример - <form action="" method="POST" id="callback-form">
    const formElement = document.getElementById("callback-form");

    // Вызываем функцию-обёртку
   sendFormWrapper(form, sendForm);
})

About

Функция-обёртка над отправкой формы с яндекс капчей

Resources

Stars

Watchers

Forks

Releases

No releases published