let webSDK = new WrSDK();
webSDK.on('init', function(){
// если this.data не пустой объект
// this.data.user будет содержать данные об авторизации
// пример: (this.data.user && this.data.user.authenticated)?alert("Авторизован"):alert("Не авторизован")
}))
Выберите дату:
captcha:
webSDK.scheduleRecReserveAnonymousInit({
name: "{{ scheduleRecReserveAnonymous.name }}",
phone: "{{ scheduleRecReserveAnonymous.phone }}",
email: "{{ scheduleRecReserveAnonymous.email }}",
st: "{{ scheduleRecReserveAnonymous.st }}",
en: "{{ scheduleRecReserveAnonymous.en }}",
date: "{{ scheduleRecReserveAnonymous.date }}",
dcode: {{ scheduleRecReserveAnonymous.dcode }},
filial: "{{ scheduleRecReserveAnonymous.filial }}",
onlineType: {{ scheduleRecReserveAnonymous.onlineMode }},
schedident: {{ scheduleRecReserveAnonymous.schedident }},
captcha: "{{anyCaptcha}}",
accept: {{ acceptPersonalData }}
})
webSDK.scheduleRecReserveAnonymousComplete({
rToken: "{{ scheduleRecReserveAnonymousConfirm.rToken }}",
phoneCode: "{{ scheduleRecReserveAnonymousConfirm.phoneCode }}"})
Для встраивания captcha нужно определить ее тип и получить ключ в случае с GoogleReCaptcha или код изображения в случае с текстовой captcha.
Пример вызова с инициализацией и встраиванием:
const container = document.getElementById("captchaContainer"); console.assert(container,"Не найден контейнер для captcha"); webSDK.getCaptcha().then(resolve=>{ // Запоминаем и проверяем тип капчи const captchaType = resolve.captchaType; if (captchaType === 'google'){ const googleCaptchaCallbackIfNeeded = function(response){ // действия после валидации // значение response отправляется для валидации в поле captcha // это значение так-же можно получить методом grecaptcha.getResponse // подробности в официальной документации https://developers.google.com/recaptcha/docs/display } // Проверяем наличии скриптов от google const script = document.getElementById('recaptchaScript'); // Callback функция готовности капчи window.reCaptchaReady = function(){ grecaptcha.ready(function(){ container.innerHTML = ""; // пробуем срендерить reCaptcha в контейнер, // если там уже есть reCaptcha - обновим ее try{ grecaptcha.render(container,{ sitekey:(document.domain.indexOf(".infoclinica.ru") + 1) ? resolve.globalPublicKey : resolve.publicKey, callback:googleCaptchaCallbackIfNeeded }) } catch (e){ grecaptcha.reset(container); } }); } if (!script) { const newScriptTag = document.createElement('script'); const scriptSrc = "https://www.google.com/recaptcha/api.js?onload=reCaptchaReady&render=explicit&hl=ru"; newScriptTag.setAttribute('src',scriptSrc); // id тэга нужен для проверки при повторных вызовах newScriptTag.setAttribute('id','recaptchaScript'); document.body.append(newScriptTag); } else { // если скрипт существует вызываем обработчик window.reCaptchaReady(); } } else if (captchaType === 'text') { // помещаем изображение капчи в контейнер container.innerHTML = resolve.captchaBody; let captcha = container.querySelector('img'); if (captcha){ // инициализируем поля и кнопку сброса для captcha const valueField = document.createElement('input') ,inputField = document.createElement('input') ,resetBtn = document.createElement('button'); // это скрытое поле, значение которого будет использоваться для проверки valueField.setAttribute('name','captcha'); valueField.setAttribute('type','hidden'); // это поле для ввода текста пользователем inputField.setAttribute('name','captchaVal'); inputField.setAttribute('type','text'); // обработчик события для заполнения скрытого поля со значением для валидации на сервере inputField.addEventListener('input',function(){ valueField.value = `${captcha.getAttribute('data-validator')}*${this.value}`; }); resetBtn.innerText = 'сброс'; // обработчик для обновления изображения captcha resetBtn.addEventListener('click',function(){ // запрашиваем новое изображение webSDK.getCaptcha().then(resolve=>{ // удаляем текущее изображение captcha.remove(); let temp = document.createElement('p'); temp.innerHTML = resolve.captchaBody; // вставляем изображение на страницу container.prepend(captcha = temp.querySelector('img')); temp.remove(); }); }); container.append(inputField); container.append(valueField); container.append(resetBtn); } } })
Важно!!
Отрисовка captcha нужна: