VK Cloud logo

Справочник 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,});

Параметры метода:

Параметр

Обязательный

Тип

Описание

link

Справочник SDK для веб-приложений

string

Ссылка для запуска виджета капчи, полученная в параметре link в ответе метода GET /captchaNotRobot.createSession. Содержит сессионный токен и метаданные:

  • domain — домен, на котором будет использована капча;
  • session_token — сессионный токен;
  • variant — вид отображения капчи (block или popup)

invisible

Справочник SDK для веб-приложений

boolean

Признак невидимой капчи. Возможные значения:

  • true — невидимая капча, проверка идет в фоновом режиме и запускается методом captchaWidget.execute();
  • false — видимая капча

container

Справочник SDK для веб-приложений

HTMLElement | string

HTML-элемент или CSS-селектор, в который встраивается капча. Если не указан, капча отображается во всплывающем окне поверх страницы с помощью метода captchaWidget.execute().

Если CSS-селектор не найдет элементов, вместо встроенной капчи отобразится всплывающее окно. Это не является ошибкой

lang

Справочник SDK для веб-приложений

string

Язык локализации задания капчи и уведомления об обработке данных. Если не указан, используется язык браузера. Если язык браузера сервису не знаком, язык задания будет определен на сервере, а уведомление отобразится на русском. Возможные значения:

  • ru — русский;
  • be — белорусский;
  • de — немецкий;
  • en — английский;
  • es — испанский;
  • fr — французский;
  • kk — казахский;
  • pl — польский;
  • tr — турецкий;
  • uk — украинский;
  • uz — узбекский;
  • zh — китайский

scheme

Справочник SDK для веб-приложений

string

Цветовая схема виджета капчи. Возможные значения:

  • light — светлая;
  • dark — темная.

По умолчанию соответствует цветовой схеме страницы или приложения, куда интегрирована капча

notice

Справочник SDK для веб-приложений

object

Настройки уведомления об обработке данных. Уведомление отображается только при invisible: true. Текст и ссылку в уведомлении изменить нельзя, так как это юридическое уведомление

notice.position

Справочник SDK для веб-приложений

string

Угол страницы, в котором отображается уведомление. Возможные значения:

  • bottom-right — снизу справа (по умолчанию);
  • bottom-left — снизу слева;
  • top-right — сверху справа;
  • top-left — сверху слева

notice.hidden

Справочник SDK для веб-приложений

boolean

Признак скрытия уведомления. Возможные значения:

  • true — уведомление скрыто;
  • false — уведомление отображается (по умолчанию). Если уведомление об обработке данных скрыто, добавьте свое уведомление

notice.draggable

Справочник SDK для веб-приложений

boolean

Признак перетаскивания уведомления вдоль края экрана. Выбранное место запоминается на этом домене. Возможные значения:

  • true — перетаскивание разрешено;
  • false — перетаскивание запрещено (по умолчанию)

slowLoadAfter

Справочник SDK для веб-приложений

number

Время в миллисекундах, по истечении которого отправляется событие, что виджет капчи еще не загрузился. Значение по умолчанию — 10000. По истечении этого времени VK Капча SDK отправляет событие captcha: load slow. Отправка события не прерывает загрузку капчи

Метод возвращает promise-объект с готовностью капчи:

promise resolvepromise reject <ОШИБКА>

Коды ошибок:

Код

Причина

invalid_link

Ошибка ссылки для запуска виджета капчи

mount_failed

Не удалось монтировать капчу на страницу

already_initialized

Метод captchaWidget.render() уже вызывали

failed

Сервис капчи сообщил об ошибке

close

Пользователь закрыл капчу

destroyed

Капча снята со страницы методом captchaWidget.destroy()

Запустить проверку пользователя

Метод captchaWidget.execute():

  • запускает проверку пользователя;
  • отображает всплывающее окно с капчей, если это задано методом captchaWidget.render();
  • возвращает токен успешного прохождения капчи для передачи бэкенду.

Метод вызывается один раз на смонтированную капча-сессию. Обычно он запускается в ответ на целевое действие пользователя, например отправку формы, но может быть вызван и по ответу бэкенда, инициировавшего капчу.

Капча-сессия расходуется первой же проверкой: после успешной проверки повторный вызов метода отклоняется с ошибкой already_checked. Чтобы запустить следующую проверку на той же загрузке страницы, снимите капчу методом captchaWidget.destroy() и смонтируйте ее заново методом captchaWidget.render() с новой ссылкой из ответа метода GET /captchaNotRobot.createSession.

Пример вызова метода:

const successToken = await captchaWidget.execute();

Параметры метода captchaWidget.execute():

Параметр

Обязательный

Тип

Описание

timeout

Справочник SDK для веб-приложений

number

Тайм-аут ожидания ответа от сервиса капчи в миллисекундах. Значение по умолчанию — 10000.

Отсчет начинается с момента вызова метода. Если капча еще загружается, ожидание загрузки входит в тайм-аут.

По истечении тайм-аута promise-объект отклоняется с ошибкой timeout, но капча остается на странице: следующий вызов метода captchaWidget.execute() уйдет в сервис капчи, как только капча загрузится.

Если капча развернулась в видимое задание, тайм-аут снимается, пользователь решает задание без ограничения по времени

Метод возвращает promise-объект с результатом проверки:

promise resolve <ТОКЕН_ПРОХОЖДЕНИЯ_КАПЧИ>promise reject <ОШИБКА>

Здесь:

  • <ТОКЕН_ПРОХОЖДЕНИЯ_КАПЧИ> — токен успешного прохождения капчи, если пользователь прошел капчу;
  • <ОШИБКА> — код ошибки.

Коды ошибок:

Код

Причина

not_initialized

Метод captchaWidget.render() не вызывали или он завершился ошибкой

not_passed

Пользователь не взаимодействовал с капчей

timeout

Ответ на проверку не пришел за отведенное время

token_expired

Время действия токена истекло

failed

Проверка провалена или ошибка виджета капчи

already_checked

Проверка уже пройдена

close

Пользователь закрыл капчу

destroyed

Капча снята со страницы методом captchaWidget.destroy()

Подписаться на события

Для подписки на события используется метод captchaWidget.on(). Имена событий доступны как свойства объекта CaptchaPublicEvents.

Пример вызова метода:

import { CaptchaPublicEvents } from '@vkid/captcha';captchaWidget.on(CaptchaPublicEvents.SUCCESS, () => setCanSubmit(true));

События, на которые можно подписаться:

Событие

Данные

Когда отправляется

captcha: success

{ token }

Проверка пройдена. Во встроенном чекбоксе — в момент нажатия флажка

captcha: challenge visible

Справочник SDK для веб-приложений

Невидимая проверка развернулась в видимое задание

captcha: challenge hidden

Справочник SDK для веб-приложений

Видимое задание свернуто

captcha: token expired

Справочник SDK для веб-приложений

Время действия токена истекло, отправлять его бэкенду уже бессмысленно

captcha: load slow

{ slowLoadAfter }

Загрузка приложения капчи идет дольше порога slowLoadAfter, указанного в методе captchaWidget.render(). Это не ошибка, капча продолжает грузиться

При использовании устаревшего метода 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-объект кодом destroyed    await captchaWidget.render({ link, lang: 'ru', invisible: true }).catch(handleRenderError);}// Уход с экрана. В React — функция очистки того же эффектаfunction unmountCaptcha() {    isScreenActive = false;    captchaWidget?.destroy();}

Отобразить капчу

Метод captchaWidget.show() отображает виджет капчи пользователю в веб-приложении и используется в случаях, когда решение о необходимости проверки пользователя принимает бэкенд. Виджет капчи отображается во всплывающем окне (iframe).

Параметры метода:

Параметр

Обязательный

Тип

Описание

container

Справочник SDK для веб-приложений

HTMLElement

HTML-элемент, в котором нужно отобразить виджет с капчей

view

Справочник SDK для веб-приложений

string

Вид капчи. Возможные значения:

  • popup — всплывающее окно;
  • block — блок

link

Справочник SDK для веб-приложений

string

Ссылка для запуска виджета капчи, полученная в параметре link в ответе метода GET /captchaNotRobot.createSession.

Заменяет устаревший параметр iframeSrc. Должен быть указан один из двух параметров.

iframeSrc

Справочник SDK для веб-приложений

string

Устаревший параметр, оставлен для совместимости. Новый параметр — link. Должен быть указан один из двух параметров.

Ссылка для запуска виджета во фронтенде вашего приложения, полученная в параметре link в ответе метода GET /captchaNotRobot.createSession. Содержит сессионный токен и метаданные:

  • domain — домен, на котором будет использована капча;
  • session_token — сессионный токен;
  • variant — вид отображения капчи (block или popup)

captchaType

Справочник SDK для веб-приложений

string

Тип капчи. Возможное значение — type_1 (по умолчанию)

autofocus

Справочник SDK для веб-приложений

boolean

Признак автофокусировки капчи. Используется только для значения block в аргументе view. Возможные значения:

  • true — автофокус включен (по умолчанию). Фокус на странице будет перемещен на веб-элемент с капчей.
  • false — автофокус отключен. Фокус на странице останется на том же месте, где и был до появления веб-элемента с капчей

scheme

Справочник SDK для веб-приложений

string

Цветовая схема виджета с капчей. Возможные значения:

  • light — светлая;
  • dark — темная.

По умолчанию соответствует цветовой схеме страницы или приложения, куда интегрирована капча

lang

Справочник SDK для веб-приложений

string

Язык локализации. Если не указан, значение будет определено на сервере. Возможные значения:

  • ru — русский;
  • be — белорусский;
  • de — немецкий;
  • en — английский;
  • es — испанский;
  • fr — французский;
  • kk — казахский;
  • pl — польский;
  • tr — турецкий;
  • uk — украинский;
  • uz — узбекский;
  • zh — китайский

onClose

Справочник SDK для веб-приложений

() => void

Callback-уведомление о закрытии капчи

Метод возвращает promise-объект с результатом прохождения капчи:

promise resolve <ТОКЕН_ПРОХОЖДЕНИЯ_КАПЧИ> promise reject <ОШИБКА>

Здесь:

  • <ТОКЕН_ПРОХОЖДЕНИЯ_КАПЧИ> — токен успешного прохождения капчи, если пользователь прошел капчу;
  • <ОШИБКА> — ошибка close, если пользователь закрыл окно капчи.
Была ли статья полезна?