Bootstrap PD Book

Интеграция с сервисом "Персональные данные"

Для помощи в интеграции были созданы демо-проекты, в которых можно посмотреть как веб-страница может взаимодействовать с сервсом Персональные данные.

Используйте их в качестве отправной точки для реализации собственной интеграции.


Алгоритм

Запрос

Веб-страница запрашивает у сервиса набор документов. Помимо этого указывается - необходим ли пакет документов для одного человека (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-страница «Заказ билетов»