Справочник SDK для веб-приложений
Поддерживаемые браузеры:
- Google Chrome версии 52 и выше;
- Microsoft Edge версии 79 и выше;
- Firefox версии 57 и выше;
- Safari версии 11 и выше;
- Opera версии 39 и выше;
- Яндекс Браузер версии 16.9 и выше.
Метод captchaWidget.render() монтирует капчу на страницу и запускает сервис капчи. Метод вызывается один раз на загрузку страницы.
Пример вызова метода:
await captchaWidget.render({link: captchaLink,lang: 'ru',invisible: true,});
Параметры метода:
Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
|
| Ссылка для запуска виджета капчи, полученная в параметре
| |
|
| Признак невидимой капчи. Возможные значения:
| |
|
| HTML-элемент или CSS-селектор, в который встраивается капча. Если не указан, капча отображается во всплывающем окне поверх страницы с помощью метода captchaWidget.execute(). Если CSS-селектор не найдет элементов, вместо встроенной капчи отобразится всплывающее окно. Это не является ошибкой | |
|
| Язык локализации задания капчи и уведомления об обработке данных. Если не указан, используется язык браузера. Если язык браузера сервису не знаком, язык задания будет определен на сервере, а уведомление отобразится на русском. Возможные значения:
| |
|
| Цветовая схема виджета капчи. Возможные значения:
По умолчанию соответствует цветовой схеме страницы или приложения, куда интегрирована капча | |
|
| Настройки уведомления об обработке данных. Уведомление отображается только при | |
|
| Угол страницы, в котором отображается уведомление. Возможные значения:
| |
|
| Признак скрытия уведомления. Возможные значения:
| |
|
| Признак перетаскивания уведомления вдоль края экрана. Выбранное место запоминается на этом домене. Возможные значения:
| |
|
| Время в миллисекундах, по истечении которого отправляется событие, что виджет капчи еще не загрузился. Значение по умолчанию — |
Метод возвращает promise-объект с готовностью капчи:
promise resolvepromise reject <ОШИБКА>
Коды ошибок:
Код | Причина |
|---|---|
| Ошибка ссылки для запуска виджета капчи |
| Не удалось монтировать капчу на страницу |
| Метод |
| Сервис капчи сообщил об ошибке |
| Пользователь закрыл капчу |
| Капча снята со страницы методом |
Метод captchaWidget.execute():
- запускает проверку пользователя;
- отображает всплывающее окно с капчей, если это задано методом captchaWidget.render();
- возвращает токен успешного прохождения капчи для передачи бэкенду.
Метод вызывается один раз на смонтированную капча-сессию. Обычно он запускается в ответ на целевое действие пользователя, например отправку формы, но может быть вызван и по ответу бэкенда, инициировавшего капчу.
Капча-сессия расходуется первой же проверкой: после успешной проверки повторный вызов метода отклоняется с ошибкой already_checked. Чтобы запустить следующую проверку на той же загрузке страницы, снимите капчу методом captchaWidget.destroy() и смонтируйте ее заново методом captchaWidget.render() с новой ссылкой из ответа метода GET /captchaNotRobot.createSession.
Пример вызова метода:
const successToken = await captchaWidget.execute();
Параметры метода captchaWidget.execute():
Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
|
| Тайм-аут ожидания ответа от сервиса капчи в миллисекундах. Значение по умолчанию — Отсчет начинается с момента вызова метода. Если капча еще загружается, ожидание загрузки входит в тайм-аут. По истечении тайм-аута promise-объект отклоняется с ошибкой Если капча развернулась в видимое задание, тайм-аут снимается, пользователь решает задание без ограничения по времени |
Метод возвращает promise-объект с результатом проверки:
promise resolve <ТОКЕН_ПРОХОЖДЕНИЯ_КАПЧИ>promise reject <ОШИБКА>
Здесь:
<ТОКЕН_ПРОХОЖДЕНИЯ_КАПЧИ>— токен успешного прохождения капчи, если пользователь прошел капчу;<ОШИБКА>— код ошибки.
Коды ошибок:
Код | Причина |
|---|---|
| Метод |
| Пользователь не взаимодействовал с капчей |
| Ответ на проверку не пришел за отведенное время |
| Время действия токена истекло |
| Проверка провалена или ошибка виджета капчи |
| Проверка уже пройдена |
| Пользователь закрыл капчу |
| Капча снята со страницы методом |
Для подписки на события используется метод captchaWidget.on(). Имена событий доступны как свойства объекта CaptchaPublicEvents.
Пример вызова метода:
import { CaptchaPublicEvents } from '@vkid/captcha';captchaWidget.on(CaptchaPublicEvents.SUCCESS, () => setCanSubmit(true));
События, на которые можно подписаться:
Событие | Данные | Когда отправляется |
|---|---|---|
|
| Проверка пройдена. Во встроенном чекбоксе — в момент нажатия флажка |
| Невидимая проверка развернулась в видимое задание | |
| Видимое задание свернуто | |
| Время действия токена истекло, отправлять его бэкенду уже бессмысленно | |
|
| Загрузка приложения капчи идет дольше порога |
При использовании устаревшего метода captchaWidget.show() события не отправляются. Результат приходит только promise-объектом метода.
Чтобы отменить подписку на события, используйте метод captchaWidget.off().
Пример вызова метода:
import { CaptchaPublicEvents } from '@vkid/captcha';captchaWidget.off(CaptchaPublicEvents.SUCCESS, onSuccess);
Метод captchaWidget.hidePopup() скрывает виджет капчи, не прерывая проверку. Сервис продолжает работать, повторный показ виджета мгновенный. Метод ничего не возвращает в ответе.
Пример вызова метода:
captchaWidget.hidePopup();
Метод captchaWidget.showPopup() возвращает виджет капчи на экран. Прохождение и состояние проверки при этом не сбрасываются. Метод ничего не возвращает в ответе.
VK Капча SDK вызывает этот метод автоматически при переходе невидимой проверки в видимое задание.
Пример вызова метода:
captchaWidget.showPopup();
Метод captchaWidget.close() закрывает виджет капчи. Метод ничего не возвращает в ответе.
Пример вызова метода:
captchaWidget.close();
Метод captchaWidget.destroy() убирает капчу со страницы и возвращает виджет в исходное состояние: после него на той же загрузке страницы можно смонтировать следующую капчу методом captchaWidget.render(). Метод ничего не возвращает в ответе.
Метод нужен одностраничным приложениям (SPA, Single Page Application), где экраны сменяются без перезагрузки страницы. В этом случае капча привязывается к жизненному циклу экрана: при появлении экрана вызывается метод captchaWidget.render(), при уходе с этого экрана — captchaWidget.destroy(). У каждого экрана своя капча-сессия и своя ссылка. Если на следующем экране тоже вызывается метод captchaWidget.render() без предшествующего вызова captchaWidget.destroy(), promise-объект отклоняется с ошибкой already_initialized.
Каждому экрану нужен свой экземпляр CaptchaWidget. Одновременно на странице должен работать только один экземпляр капчи. При переходе между экранами сначала вызовите captchaWidget.destroy() на текущем экземпляре, а затем создайте и смонтируйте новый.
Ссылка для следующей капчи должна быть новой: капча-сессия расходуется первой же проверкой. Запросите свежую ссылку методом GET /captchaNotRobot.createSession. Кешировать ссылку в состоянии приложения нельзя: на следующем экране капча смонтируется, но проверка вернет истекший токен. Запрашивайте ссылку в том же коде, который вызывает captchaWidget.render().
Обрабатывайте отклонение promise-объекта с ошибкой destroyed. Метод captchaWidget.destroy() отклоняет незавершенные promise-объекты методов captchaWidget.render() и captchaWidget.execute() с ошибкой destroyed. В React StrictMode эффект в режиме разработки выполняется дважды, поэтому первый вызов captchaWidget.render() отклоняется всегда — в консоли это выглядит как необработанное отклонение promise-объекта.
Перед вызовом captchaWidget.render() проверяйте, что экран еще активен. Между запросом ссылки и ответом бэкенда пользователь может уйти с экрана. Вызванный после этого captchaWidget.destroy() ничего не сделает, потому что капча еще не смонтирована, а вызванный следом captchaWidget.render() смонтирует ее на покинутом экране.
О снятии капчи VK Капча SDK событий не отправляет.
Пример вызова метода:
let captchaWidget: CaptchaWidget | undefined;let isScreenActive = false;// Экран появился. В React — эффект компонента, в котором стоит капчаasync function mountCaptcha() {isScreenActive = true;captchaWidget = new CaptchaWidget();captchaWidget.on(CaptchaPublicEvents.SUCCESS, onSuccess);const { link } = await api.post('/api/captcha/session', { client });// Пользователь мог уйти с экрана, пока бэкенд отвечалif (!isScreenActive) {return;}// Уход с экрана до загрузки отклоняет promise-объект кодом destroyedawait captchaWidget.render({ link, lang: 'ru', invisible: true }).catch(handleRenderError);}// Уход с экрана. В React — функция очистки того же эффектаfunction unmountCaptcha() {isScreenActive = false;captchaWidget?.destroy();}
Метод captchaWidget.show() отображает виджет капчи пользователю в веб-приложении и используется в случаях, когда решение о необходимости проверки пользователя принимает бэкенд. Виджет капчи отображается во всплывающем окне (iframe).
Параметры метода:
Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
|
| HTML-элемент, в котором нужно отобразить виджет с капчей | |
|
| Вид капчи. Возможные значения:
| |
|
| Ссылка для запуска виджета капчи, полученная в параметре Заменяет устаревший параметр | |
|
| Устаревший параметр, оставлен для совместимости. Новый параметр — Ссылка для запуска виджета во фронтенде вашего приложения, полученная в параметре
| |
|
| Тип капчи. Возможное значение — | |
|
| Признак автофокусировки капчи. Используется только для значения
| |
|
| Цветовая схема виджета с капчей. Возможные значения:
По умолчанию соответствует цветовой схеме страницы или приложения, куда интегрирована капча | |
|
| Язык локализации. Если не указан, значение будет определено на сервере. Возможные значения:
| |
|
| Callback-уведомление о закрытии капчи |
Метод возвращает promise-объект с результатом прохождения капчи:
promise resolve <ТОКЕН_ПРОХОЖДЕНИЯ_КАПЧИ>promise reject <ОШИБКА>
Здесь:
<ТОКЕН_ПРОХОЖДЕНИЯ_КАПЧИ>— токен успешного прохождения капчи, если пользователь прошел капчу;<ОШИБКА>— ошибкаclose, если пользователь закрыл окно капчи.