Подключение к веб-приложению
-
Загрузите VK Капча SDK:
npmyarnpnpmJS-скриптnpm install @vkid/captcha -
Добавьте во фронтенд получение класса
captchaWidget:npm, yarn, pnpmJS-скриптimport { CaptchaWidget } from "@vkid/captcha"; -
Убедитесь, что при локальной разработке используются стандартные порты
80для HTTP и443для HTTPS. -
Получите от бэкенда ссылку для запуска виджета капчи.
-
Отобразите капчу пользователю. Воспользуйтесь методом SDK
captchaWidget.show().Метод вернет promise-объект с результатом прохождения капчи: токен успешного прохождения капчи, если пользователь прошел капчу, или ошибку, если пользователь закрыл капчу.
-
Обработайте результат прохождения капчи:
- Если promise-объект содержит токен успешного прохождения капчи, отправьте его бэкенду для валидации.
- Если пользователь закрыл капчу, бэкенду ничего не отправляется. Определите, что будет происходить во фронтенде в этом случае.
Пример кода на TypeScript:
const API_ERROR_CODE_CAPTCHA = <КОД_ОШИБКИ>; //Код ошибки, который бэкенд сервиса отправляет, если для действия пользователя нужна капчаinterface ApiCaptchaError {error_code: number;error_msg: string;captcha_sid: string; // Идентификатор сессии капчиredirect_uri: string; // Ссылка для запуска виджета капчи, полученная от бэкенда, содержит сессионный токен}const handleCaptchaError = async (captchaUrl: string) => { // Обработчик капчиtry {const captchaWidget = new CaptchaWidget();const success_token = await captchaWidget.show({ // Метод show() возвращает promise-объект с токеном success_token при успешном прохождении капчиcontainer: document.body, // HTML-элемент, в котором будет отображаться виджет капчиiframeSrc: captchaUrl, // Ссылка для запуска виджета капчи из параметра redirect_uricaptchaType: 'type_1', // Тип капчи: 'type_1'view: 'popup', // Вид капчи: 'popup' или 'block'});fetch('url'); // Повторный запрос на действие пользователя + полученный success_token} catch (error) {if (error === 'close') {// Обработка закрытия капчи пользователем}}};fetch('url') // Пользователь выполняет действие.then((response) => response.json()).then((data) => { // Проверка кода ошибкиconst error = data.error;if (error?.error_code === API_ERROR_CODE_CAPTCHA) { // Если вернулся код ошибки API_ERROR_CODE_CAPTCHA, вызывается обработчик капчи с redirect_urihandleCaptchaError(error.redirect_uri);}});