{{ namePage }}


Подключение webSdk на HTML страницу


                        
let webSDK = new WrSDK();
    webSDK.on('init', function(){
        // если this.data не пустой объект
        // this.data.user будет содержать данные об авторизации
        // пример: (this.data.user && this.data.user.authenticated)?alert("Авторизован"):alert("Не авторизован")
    }))

1. Регистрация нового пациента


1.1. Отправка кодов

webSDK.registerInit({
    lastName: "{{ registerInit.lastName }}",
    firstName: "{{ registerInit.firstName }}",
    middleName: "{{ registerInit.middleName }}",
    birthDate: "{{ registerInit.birthDate }}",
    email: "{{ registerInit.email }}",
    phone: "{{ registerInit.phone }}",
    snils: "{{ registerInit.snils }}",
    gender: "{{ registerInit.gender }}"
})

1.2. Завершение регистрации

webSDK.registerComplete({
    rToken: "{{ registerComplete.rToken }}",
    emailCode: "{{ registerComplete.emailCode }}",
    smsCode: "{{ registerComplete.smsCode }}",
    password: "{{ registerComplete.password }}"
})

2. Аутентификация и авторизация пациента


2.1. По логину и паролю

webSDK.loginClient({
    login: "{{ loginClient.login }}",
    pass: "{{ loginClient.pass }}"
})

2.1.1. Смена временного пароля

webSDK.changeTempPassword({
    pwdToken: "{{ changeTempPass.pwdToken }}",
    password: "{{ changeTempPass.password }}"
})

2.2. Аутентификация и авторизация пациента через сервис ЕСИА

webSDK.loadLoginView({
    authType: "{{ loginClientEsia.authType }}",
    redirectUrl: "{{ loginClientEsia.redirectUrl }}",
    newWindow: {{ loginClientEsia.newWindow }}
})

2.3. Авторизация по SMS

2.3.1. Инициализация

webSDK.loginClientSmsInit({
    phone: "{{ loginClientBySMS.phone }}",
    lastName: "{{ loginClientBySMS.lastName }}",
    firstName: "{{ loginClientBySMS.firstName }}",
    middleName: "{{ loginClientBySMS.middleName }}",
    birthDate: "{{ loginClientBySMS.birthDate }}"
})

2.3.2. Завершение

webSDK.loginClientSmsComplete({
    code: "{{ loginClientBySMS.smsCode }}",
    rToken: "{{ loginClientBySMS.rToken }}",
    phone: "{{ loginClientBySMS.phone }}",
    lastName: "{{ loginClientBySMS.lastName }}",
    firstName: "{{ loginClientBySMS.firstName }}",
    middleName: "{{ loginClientBySMS.middleName }}",
    birthDate: "{{ loginClientBySMS.birthDate }}"
})

2.4. Восстановление пароля

2.4.1. Инициализация

webSDK.recoveryInit({
    login: "{{ recoveryInit.login }}"
})

2.4.2. Завершение

webSDK.recoveryComplete({
pwdToken: "{{ recoveryComplete.pwdToken }}",
password: "{{ recoveryComplete.password }}"
code: "{{ recoveryComplete.code }}"
})

3. Методы после авторизации


3.1. Выбор пациента из доступных клиенту

webSDK.selectClient({
    id: {{ selectClient.id }}
})

3.2. Изменение параметров учетной записи

webSDK.clientModify({
    email: "{{ clientModify.email }}",
    password: "{{ clientModify.password }}",
    phone: "{{ clientModify.phone }}"
})

3.8.1. Файл протокола

webSDK.downloadTreatPlaceDocument({
    protocolId: {{ loadTreatPlaceView.protocolId }},
    treatcode: {{ loadTreatPlaceView.treatcode }},
    download: '{{ loadTreatPlaceView.download }}'
})

3.8.2. Вложение протокола

webSDK.downloadTreatPlaceAttachment({
    protocolId: {{ loadTreatPlaceView.protocolId }},
    treatcode: {{ loadTreatPlaceView.treatcode }},
    attachmentId: {{ loadTreatPlaceView.attachmentId }},
    download: '{{ loadTreatPlaceView.download }}'
})

3.8.3. Файл записи\списка записей

webSDK.downloadRecordDocument({
    schedid: {{ loadTreatPlaceView.schedid }},
    st: {{ loadTreatPlaceView.st }},
    en: {{ loadTreatPlaceView.en }},
    download: '{{ loadTreatPlaceView.download }}'
})

3.9. Список направлений

webSDK.loadReferralList({
    start: {{ referralsList.start }},
    length: {{ referralsList.length }}
})

3.10. Список платежей

webSDK.loadPaymentList({
    start: {{ paymentList.start }},
    length: {{ paymentList.length }}
})

3.11. Список бонусов

webSDK.loadBonusList()

3.12. Список уведомлений

webSDK.loadNotificationList()

3.13. Загрузка платежной формы

webSDK.loadPaymentView({
    orderid: {{ loadPaymentView.orderid }},
    payprofileid: {{ loadPaymentView.payprofileid }},
    payamount: {{ loadPaymentView.payamount }},
    paymethod: {{ loadPaymentView.paymethod }},
    filial: {{ loadPaymentView.filial }},
pcode: {{ loadPaymentView.pcode }},
    successurl: {{ loadPaymentView.successurl }}(с указанием протокола https://),
    errorurl: {{ loadPaymentView.errorurl }}(с указанием протокола https://),
    containerId: {{ loadPaymentView.containerId }},
})

3.14. Открытие онлайн приема

Выберите онлайн прием:


webSDK.openConference({
    schedid: {{ openConference.schedid }},
    container: {{ openConference.container }}
})

4. Сервисные методы


4.1. Встраивание кода проверки captcha

Для встраивания captcha нужно определить ее тип и получить ключ в случае с GoogleReCaptcha или код изображения в случае с текстовой captcha.

#captchaContainer

Пример вызова с инициализацией и встраиванием:

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 нужна:
  • Для анонимной записи и регистрации при условии: response.registration == true || response.allEnabled == true
  • Для анонимной записи регистрации и авторизации при условии: response.allEnabled == true
  • Не требуется при условии: response.registration == false && response.allEnabled == false

{{`4.${index+2}.`}} {{item.name}}

webSDK.{{item.mnemo}}()