Интеграция с сервисом "Персональные данные"
Для помощи в интеграции были созданы демо-проекты, в которых можно посмотреть как веб-страница может взаимодействовать с сервсом Персональные данные.
Используйте их в качестве отправной точки для реализации собственной интеграции.
Алгоритм
Запрос
Веб-страница запрашивает у сервиса набор документов. Помимо этого указывается - необходим ли пакет документов для одного человека (single request) или для нескольких (multy request).
Например, вы хотите получить контактные данные и паспорт на одного человека. Тогда вам нужно описать запрос в виде следующей структуры:
{ multy: false, documents: { contacts: {}, passport: {} } }
Названия типов документов можно получить через публичный API.
Для получения данных фомируется iframe, где происходит запрос к персональным данным. Если требуется авториазация - пользователь авторизуется.
HTML код на стороне веб-страницы может выглядеть следующим образом:
<button type="button" data-request-suffix="request-passport" onclick=" personal_data_integration(this, { multy: false, documents: { contacts: {}, passport: {} }} );" data-request-callback="personal_data_callback"> Использовать сервис ПД <button>
Функция personal_data_integration
из демонстрации интреграции, как раз отвечает за процесс инициации запроса
и показ iframe. Она также указывает куда передать ответ системы (data-request-callback
).
Выбор профилей
Далее от пользователя требуется выбрать профили, из которых будут предоставлены требуемые документы.
В некоторых случаях этот выбор может быть сделан системой, если выбор ограничен одним профилем, а пользователь ранее дал согласие предоставлять информацию для данного сайта, минуя этот диалог.
Если сайт делает разные запросы, и необходимо различать согласие пользователя на каждый из них, то
можно использовать дополнительную настройку data-request-suffix="REQUEST SUFFIX"
, где
каждое значение должно быть уникально для запрашиваемого набора данных.
Получение ответа
Ответ будет передан в виде массива профилей с вложенными документами в функцию,
указанную как data-request-callback
Пример реализации такой функции:
function personal_data_callback(data) { // выбирается контейнер, где нужно заполнить поля формы const form = document.getElementById('target-form'); if (data.profiles.length > 0) { // полученные данные применяются к указанному контейнеру. personal_data_integration_apply(form, data.profiles[0]); } }
Реализация опирается на хелпер функцию personal_data_integration_apply
в pd.js.
Данный helper читает настройки полей формы в указанном контейнере и подставляет полученные данные.
Пример настройки поля для получения почтового индекса и контактных данных:
<input type="text" data-pd-api-field="contacts.address.postcode" />
С помощью атрибута data-pd-api-field
вы указываете какие данные требуется подставить
в данное поле формы. Цепочки составного имени могут быть и более длинными. Для простоты отладки
и настройки ваших форм составные имена полей, полученных данных, выводятся в консоль браузера.
Имена полей можно получить из схемы документов публичного API - это apiTitle.
Helper также способен упаковать несколько полей из запроса в одно поле формы. Например, серию и номер паспорта можно получить в одно поле, использовав следующую настройку:
<input type="text" data-pd-api-join-fields="passport.series,passport.number" data-pd-fields-delimiter=" " />
Если вы не указываете data-pd-fields-delimiter
, то разделителем будет запятая.
Получение ответа для нескольких профилей
API всегда возвращает профили в виде массива. И вы не знаете какой объем данных (кол-во профилей) предоставит пользователь для multy request случая заранее. В случае single request, в массиве будет присутствовать только один профиль.
По сути от вас требуется для каждлого профиля создать экземпляр шаблона вашей формы и реализовать в цикле вставку данных профиля в этот шаблон.
Пример реализации такого случая Web-страница «Заказ билетов»