Как мы с помощью ЭЦП реализовали подписание документов для электронной торговой площадки

Наша команда в 2022 году выпустила проект NEDRARU.RU на системе «1С-Битрикс». Эта онлайн-площадка позволяет купить, продать, сдать в аренду участок недр или месторождение, а также найти надежных поставщиков и подрядчиков.

Одной из важных задач было создание возможности подписания документов для проведения аукционов. В этой статье подробно расскажем, как мы реализовали это технически.

Как работает система подписания документов на портале

На портале NEDRARU.RU во время проведения аукционов участвуют 3 стороны: портал, создатель аукциона и участник аукциона. У любого пользователя, который зарегистрировался на сайте как владелец объекта, есть возможность создать аукцион по опубликованному им объекту на продажу или аренду.

Для юридического проведения аукционов между NEDRARU.RU, создателем аукциона и участниками аукциона необходимо, чтобы все стороны подписали документы посредством электронной цифровой подписи (ЭЦП). Создателю и участнику аукциона необходимо заранее самостоятельно оформить ЭЦП в любом аккредитованном удостоверяющем центре.

Документы для аукциона подписываются на сайте аккредитованного удостоверяющего центра (далее — «Сервис»).

Как мы выбирали удостоверяющий центр

Мы обратились в несколько аккредитованных удостоверяющих центров. Как оказалось, не все центры готовы заниматься интеграцией своего инструментария во внешние сервисы, так как это не их профильная услуга. Нашим предложением заинтересовались коллеги в «Инфотекс Интернет Траст».

Для сотрудничества с нами сервис выделил опытного специалиста. Мы остались довольны, смогли оперативно и качественно реализовать все задачи:

  • Автоматическая регистрация пользователя в сервисе «Инфотекс Интернет Траст» с передачей данных о нем с портала NEDRARU.RU.
  • Передача документов на подпись с портала NEDRARU.RU и формирование ссылки на подпись для участников.
  • Получение статуса подписи (прошла успешно / не подписан) с сервиса «Инфотекс Интернет Траст» на портал NEDRARU.RU.

Описание технической части процесса

Мы провели интеграцию с сервисом через создание клиентской части на PHP в «1С-Битрикс». Клиентская часть взаимодействует с сервисом по API.

Работа с сервисом «Инфотекс Интернет Траст» состоит из двух частей:

  1. Взаимодействие с API саморегистрации пользователей для проверки и регистрации новых пользователей на портале «Инфотекс Интернет Траст».
  2. Взаимодействие с API передачи документов.

Оба API выполнены в архитектурном стиле REST и описаны по спецификации OpenAPI. Отличие между ними — в типе аутентификации. В первом случае для проверки запросов используется идентификатор вашей организации, выданный сервисом. Во втором — полноценный токен, возвращаемый с сервера «Инфотекс Интернет Траст» посредством передачи пары логин-пароль.

Сервис предоставляет разработчикам краткие сценарии использования основных функций https://b2b.iitrust.ru/docs, описание API https://b2b.iitrust.ru/api/docs/, а также адрес dev-площадки для тестирования.

Для обмена с API в рамках PHP можно использовать клиентскую библиотеку curl. В «1С-Битрикс» мы использовали встроенный класс httpclient (https://dev.1c-bitrix.ru/api_d7/bitrix/main/web/httpclient/index.php).

Рассмотрим процесс поэтапно.

1. Регистрация пользователей с портала NEDRARU.RU в сервисе «Инфотекс Интернет Траст»

Первоначально наша задача состояла в регистрации пользователей с портала NEDRARU.RU в сервисе «Инфотекс Интернет Траст». Регистрация происходит посредством создания заявки на регистрацию путем передачи персональных данных пользователя и открытой части ключа электронной подписи (подробнее тут):

1.png

Где "sourceId" — уникальный идентификатор нашей организации, выдаваемый «Инфотекс Интернет Траст».

"certificateBase64” — открытая часть ключа подписи пользователя в формате Base64.

В "requestSourcesIds" аналогично передаем наш идентификатор, чтобы зарегистрированный пользователь сразу появился в нашем списке контрагентов на сайте «Инфотекс Интернет Траст».

1_Список-контрагент-в-на-сайте-Инфотекс-Интернет Траст.png
Список контрагентов на сайте «Инфотекс Интернет Траст»

Остальные поля — это просто соответствующие данные пользователя.

При корректно заполненной информации в ответе в поле ["data"]["orderId"]; получаем id нашей заявки по регистрации.

2. Проверка заявки на регистрацию

Далее мы можем проверить статус нашей заявки на регистрацию через get-запрос вида:
$response = $httpClient->get(
$this->apiUrlReg . "/api/v2/b2b-requests/".$orderId."/status"
);

Где orderId — это id нашей заявки, полученной на предыдущем шаге.

После успешной регистрации пользователя можно приступать к работе с документами через второе API.

3. Работа с документами через API: получение токена

Здесь наша задача состоит в получении токена, который потребуется для всех дальнейших операций, передав пару логин-пароль по адресу /api/auth/login/.

Для этого формируем запрос к серверу:

2.png

В ответе с сервера в поле "token" получаем токен. Далее ставим его в заголовок всех наших будущих запросов:
$httpClient->setHeader("Authorization", "Bearer " . $this->token, true);

4. Работа с документами через API: отправка документов на подпись

Чтобы отправить документы на подпись, нам необходимо получить уникальный идентификатор пользователя, зарегистрированного нами в «Инфотекс Интернет Траст».

Он входит в список наших контрагентов, поэтому мы можем получить этот идентификатор запросом поиска по контрагентам:

3.png

Где $searchStirng — это ИНН нашего пользователя.

Теперь отправляем документы на подпись запросом на /api/workflow

4.png

Документы, как и открытая часть ключа, передаются в формате base64.

Дополнительно нам понадобится параметр contractorRecipients. Параметр представляет собой массив с идентификаторами пользователей, которым отправляются документы.

Используем наш идентификатор, полученный на предыдущем шаге. В результате получаем id операции в поле "id".

По id мы формируем ссылку на сайт вида https://b2b.iitrust.ru/workflow/#ID_Операции#.
По этой ссылке будет происходить подписание документов в сервисе «Инфотекс Интернет Траст».

2-Интерфейс-подписи-документов-на -айте-Инфотекс-Интернет-Траст.png
Интерфейс подписи документов на сайте «Инфотекс Интернет Траст»

Основная работа завершена.

5. Работа с документами через API: подпись документов

Теперь мы можем передать эту ссылку стороне, отправляющей документы на подпись (в нашем случае — оператору NEDRARU.RU).

В интерфейсе «Инфотекс Интернет Траст» по нажатию кнопки «Отправить на подписание» происходит передача документов принимающей стороне (пользователю, которого мы зарегистрировали).

3_Отправка-заявки-на-подпись-документов-из-интерфейса -Инфотекс Интернет-Траст.png
Отправка заявки на подпись документов из интерфейса «Инфотекс Интернет Траст»

Страница подписания для нее также становится доступна по используемой ранее ссылке https://b2b.iitrust.ru/workflow/#ID_Операции#.

Отслеживать состояние процесса подписания со стороны сайта (подписано, аннулировано, отправлено и др.) мы можем запросом на /api/workflow/

$response = $httpClient->get(
$this->apiUrl . "/api/workflow/" . $operationID . "/"
);

Где $operationID — это id нашей операции. В поле state вернется ее текущий статус.

На этом техническая часть по настройке подписания документов при помощи ЭЦП завершена.

Наш клиент получил реализованный под ключ проект. Теперь проводить сделки по купле-продаже и аренде участков недр или месторождений стало удобнее и проще.


Команда INDEXIS
Команда
INDEXIS.RU

Ежемесячный дайджест лучших статей

Хотите оценить возможности
Вашего бизнеса?

Оставьте заявку и мы свяжемся с Вами.