Как мы с помощью ЭЦП реализовали подписание документов для электронной торговой площадки
Наша команда в 2022 году выпустила проект NEDRARU.RU на системе «1С-Битрикс». Эта онлайн-площадка позволяет купить, продать, сдать в аренду участок недр или месторождение, а также найти надежных поставщиков и подрядчиков.
Одной из важных задач было создание возможности подписания документов для проведения аукционов. В этой статье подробно расскажем, как мы реализовали это технически.
Как работает система подписания документов на портале
На портале NEDRARU.RU во время проведения аукционов участвуют 3 стороны: портал, создатель аукциона и участник аукциона. У любого пользователя, который зарегистрировался на сайте как владелец объекта, есть возможность создать аукцион по опубликованному им объекту на продажу или аренду.
Для юридического проведения аукционов между NEDRARU.RU, создателем аукциона и участниками аукциона необходимо, чтобы все стороны подписали документы посредством электронной цифровой подписи (ЭЦП). Создателю и участнику аукциона необходимо заранее самостоятельно оформить ЭЦП в любом аккредитованном удостоверяющем центре.
Документы для аукциона подписываются на сайте аккредитованного удостоверяющего центра (далее — «Сервис»).
Как мы выбирали удостоверяющий центр
Мы обратились в несколько аккредитованных удостоверяющих центров. Как оказалось, не все центры готовы заниматься интеграцией своего инструментария во внешние сервисы, так как это не их профильная услуга. Нашим предложением заинтересовались коллеги в «Инфотекс Интернет Траст».
Для сотрудничества с нами сервис выделил опытного специалиста. Мы остались довольны, смогли оперативно и качественно реализовать все задачи:
- Автоматическая регистрация пользователя в сервисе «Инфотекс Интернет Траст» с передачей данных о нем с портала NEDRARU.RU.
- Передача документов на подпись с портала NEDRARU.RU и формирование ссылки на подпись для участников.
- Получение статуса подписи (прошла успешно / не подписан) с сервиса «Инфотекс Интернет Траст» на портал NEDRARU.RU.
Описание технической части процесса
Мы провели интеграцию с сервисом через создание клиентской части на PHP в «1С-Битрикс». Клиентская часть взаимодействует с сервисом по API.
Работа с сервисом «Инфотекс Интернет Траст» состоит из двух частей:
- Взаимодействие с API саморегистрации пользователей для проверки и регистрации новых пользователей на портале «Инфотекс Интернет Траст».
- Взаимодействие с 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 в сервисе «Инфотекс Интернет Траст». Регистрация происходит посредством создания заявки на регистрацию путем передачи персональных данных пользователя и открытой части ключа электронной подписи (подробнее тут):
Где "sourceId" — уникальный идентификатор нашей организации, выдаваемый «Инфотекс Интернет Траст».
"certificateBase64” — открытая часть ключа подписи пользователя в формате Base64.
В "requestSourcesIds" аналогично передаем наш идентификатор, чтобы зарегистрированный пользователь сразу появился в нашем списке контрагентов на сайте «Инфотекс Интернет Траст».
Список контрагентов на сайте «Инфотекс Интернет Траст»
Остальные поля — это просто соответствующие данные пользователя.
При корректно заполненной информации в ответе в поле ["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 2.png](/upload/medialibrary/046/0461483566e0d980556f3ebc893cdd39.png)
В ответе с сервера в поле "token" получаем токен. Далее ставим его в заголовок всех наших будущих запросов:
$httpClient->setHeader("Authorization", "Bearer " . $this->token, true);
4. Работа с документами через API: отправка документов на подпись
Чтобы отправить документы на подпись, нам необходимо получить уникальный идентификатор пользователя, зарегистрированного нами в «Инфотекс Интернет Траст».
Он входит в список наших контрагентов, поэтому мы можем получить этот идентификатор запросом поиска по контрагентам:
Где $searchStirng — это ИНН нашего пользователя.
Теперь отправляем документы на подпись запросом на /api/workflow
Документы, как и открытая часть ключа, передаются в формате base64.
Дополнительно нам понадобится параметр contractorRecipients. Параметр представляет собой массив с идентификаторами пользователей, которым отправляются документы.
Используем наш идентификатор, полученный на предыдущем шаге. В результате получаем id операции в поле "id".
По id мы формируем ссылку на сайт вида https://b2b.iitrust.ru/workflow/#ID_Операции#.
По этой ссылке будет происходить подписание документов в сервисе «Инфотекс Интернет Траст».
Интерфейс подписи документов на сайте «Инфотекс Интернет Траст»
Основная работа завершена.
5. Работа с документами через API: подпись документов
Теперь мы можем передать эту ссылку стороне, отправляющей документы на подпись (в нашем случае — оператору NEDRARU.RU).
В интерфейсе «Инфотекс Интернет Траст» по нажатию кнопки «Отправить на подписание» происходит передача документов принимающей стороне (пользователю, которого мы зарегистрировали).
![3_Отправка-заявки-на-подпись-документов-из-интерфейса -Инфотекс Интернет-Траст.png 3_Отправка-заявки-на-подпись-документов-из-интерфейса -Инфотекс Интернет-Траст.png](/upload/medialibrary/628/628c82befe52c9a9f571ba0b4e6efb16.png)
Отправка заявки на подпись документов из интерфейса «Инфотекс Интернет Траст»
Страница подписания для нее также становится доступна по используемой ранее ссылке https://b2b.iitrust.ru/workflow/#ID_Операции#.
Отслеживать состояние процесса подписания со стороны сайта (подписано, аннулировано, отправлено и др.) мы можем запросом на /api/workflow/
$response = $httpClient->get(
$this->apiUrl . "/api/workflow/" . $operationID . "/"
);
Где $operationID — это id нашей операции. В поле state вернется ее текущий статус.
На этом техническая часть по настройке подписания документов при помощи ЭЦП завершена.
Наш клиент получил реализованный под ключ проект. Теперь проводить сделки по купле-продаже и аренде участков недр или месторождений стало удобнее и проще.