Формулировка проблемы: для реализации задач мобильного клиента необходимо реализовать методы API для подписывания документов с помощью ЭЦП.
Решение: необходимо реализовать следующие методы API:
Данный метод используется для подписывания документа (кнопкой "Подписать").
URL нового метода: rest/api/docflow/sign
.
Тип запроса: POST
.
Метод принимает следующие строковые параметры (FormParam):
documentID
- идентификатор подписываемого
документа (обяз.);
rawdata
- Base64 закодированные
подписываемые данные (обяз.);
signdata
- Base64 закодированная строка с
подписью (обяз., если включена настройка "Требовать ключ
и сертификат");
certificate
- Base64 закодированная строка
с сертификатом (обяз., если включена настройка "Требовать
ключ и сертификат");
certID
- идентификатор сертификата (обяз.,
если включена настройка "Требовать ключ и
сертификат", получается в методе
sign/verificationkey
);
locale
- локаль пользователя,
ru/en/kz
(не обяз., по умолчанию
ru
).
Пример передаваемых данных
{ documentID=23288475-1393-474a-9849-6c1d6600a0dd& rawdata=gs65nEDW1GxiEoj22XoJ6QPwWUM%3D& signdata=MIIOAwIBAzCCDb0GCSqGSIb3DQEHAaCC2qMIAwgAYJKoZIhvcNAQcBoIAEggW& certificate=5qLrhfFWNcHT%2BVEMvA%2BgUvYk956seA+wgNqniukCz8TyGTv8AMo4v8aW& certID=610466d0-cae8-11e5-b48c-001e8726c38d }
Метод возвращает успешность (подпись документа с ЭЦП):
{ "errorCode": 0, "errorMessage": "Данные сохранены" }
либо неуспешность выполнения (errorCode != 0, errorMessage - сообщение об ошибке).
Альтернативные потоки событий.
Альтернативный поток №1. Не передан параметр
documentID
. Сервер возвращает ошибку с
сообщением:
{ "errorCode": 13, "errorMessage": "Не передан параметр documentID" }
Альтернативный поток №2. Передан некорректный параметр
documentID
. Сервер возвращает ошибку с
сообщением:
{ "errorCode": 13, "errorMessage": "Передан некорректный параметр documentID" }
Альтернативный поток №3. Не передан параметр
rawdata
. Сервер возвращает ошибку с сообщением:
{ "errorCode": 13, "errorMessage": "Не передан параметр rawdata" }
Альтернативный поток №4. При наличии требования ключа и
сертификата не передан параметр signdata
.
Сервер возвращает ошибку с сообщением:
{ "errorCode": 13, "errorMessage": "Не передан параметр signdata" }
Альтернативный поток №5. При наличии требования ключа и
сертификата и параметра signdata
не передан
параметр certificate
. Сервер возвращает ошибку
с сообщением:
{ "errorCode": 13, "errorMessage": "Не передан параметр certificate" }
Альтернативный поток №6. При наличии требования ключа и
сертификата и параметра signdata
не передан
параметр certID
. Сервер возвращает ошибку с
сообщением:
{ "errorCode": 13, "errorMessage": "Не передан параметр certID" }
Альтернативный поток №7. Параметр rawdata
не
соответствует текущим подписываемым данным документа. Сервер
возвращает ошибку с сообщением:
{ "errorCode": 13, "errorMessage": "Передан некорректный параметр rawdata" }
Альтернативный поток №8. Параметр signdata
не
соответствует текущим подписываемым данным документа. Сервер
возвращает ошибку с сообщением:
{ "errorCode": 13, "errorMessage": "Передан некорректный параметр signdata" }
Кроме того, возможен вывод ошибки, если сертификат в период между прохождением верификации и непосредственно подписью стал просроченным, отозванным, либо не может быть проверен, стал недоступен центр сертификации, не найдена цепочка корневых сертификатов.
Аналогично, возможен вывод ошибки, если в период между получением подписываемых данных и непосредственно подписью эти самые подписываемые данные были изменены.
Данный метод используется для подписывания документа при согласовании / утверждении / ознакомлении.
URL дорабатываемого метода:
rest/api/workflow/finish_process
.
Тип запроса: POST
.
Метод принимает следующие строковые параметры (FormParam):
procInstID
- идентификатор процесса (обяз.,
поле procInstID
в описании работы, например
из метода
/rest/api/workflow/works/list/%user_id%
);
signal
- название сигнала (обяз.,
получается в методе
rest/api/workflow/process_info
);
comment
- текст комментария (не обяз.);
Примечание.
Наличие данного параметра должно игнорироваться для процесса "ознакомление".
addSignature
- необходимо ли добавить
подпись (true/ false, по умолчанию false);
rawdata
- Base64 закодированные
подписываемые данные (обяз., если включена настройка
"Требовать ли подпись", получаются в методе
rest/api/workflow/process_info
);
signdata
- Base64 закодированная строка с
подписью (обяз., если включена настройка "Требовать ключ
и сертификат");
certificate
- Base64 закодированная строка
с сертификатом (обяз., если включена настройка "Требовать
ключ и сертификат");
certID
- идентификатор сертификата (обяз.,
если включена настройка "Требовать ключ и
сертификат", получается в методе
sign/verificationkey
);
locale
- локаль пользователя,
ru/en/kz
(не обяз., по умолчанию
ru
).
Пример передаваемых данных
procInstID=8f228927-2183-4fc8-9f87-b421bf63efc4& signal=got_agree& addSignature=true& rawdata=74PFr9hyqFhqnsoYRAhf91qcVmU%3D& signdata=MIIOAwIBAzCCIb3DQEHAaCCDa4Egg2qMIAwgAYJKoZIhvcNAQcBoIAEggW& certificate=5qLrhfFWNO0G05ij%252F69956seA%2BwgNGpqniukCz8TyGTv8AMo4v8aW& certID=610466d0-cae8-11e5-b48c-001e8726c38d
Метод возвращает успешность выполнения (завершение работы по процессу с подписью ЭЦП):
{ "errorCode": "0", "errorMessage": "Данные сохранены" }
либо неуспешность выполнения (errorCode != 0, errorMessage - сообщение об ошибке).
Альтернативные потоки событий.
Альтернативный поток №1. Тип процесса требует наличие подписи, при
этом не передан параметр addSignature
. Сервер
возвращает ошибку с сообщением:
{ "errorCode": "13", "errorMessage": "Данный тип процесса требует подписи" }
Для дальнейших альтернативных потоков считаем, что тип процесса
требует подписи и что передан параметр
addSignature
.
Альтернативный поток №2. Не передан параметр
rawdata
. Сервер возвращает ошибку с сообщением:
{ "errorCode": "13", "errorMessage": "Не передан параметр rawdata" }
Альтернативный поток №3. При наличии требования ключа и
сертификата не передан параметр signdata
.
Сервер возвращает ошибку с сообщением:
{ "errorCode": "13", "errorMessage": "Не передан параметр signdata" }
Альтернативный поток №4. При наличии требования ключа и
сертификата и параметра signdata
не передан
параметр certificate
. Сервер возвращает ошибку
с сообщением:
{ "errorCode": "13", "errorMessage": "Не передан параметр certificate" }
Альтернативный поток №5. При наличии требования ключа и
сертификата и параметра signdata
не передан
параметр certID
. Сервер возвращает ошибку с
сообщением:
{ "errorCode": "13", "errorMessage": "Не передан параметр certID" }
Альтернативный поток №6. Параметр rawdata
не
соответствует текущим подписываемым данным документа. Сервер
возвращает ошибку с сообщением:
{ "errorCode": "13", "errorMessage": "Передан некорректный параметр rawdata" }
Альтернативный поток №7. Параметр signdata
не
соответствует текущим подписываемым данным документа. Сервер
возвращает ошибку с сообщением:
{ "errorCode": "13", "errorMessage": "Передан некорректный параметр signdata" }
Альтернативный поток №8. Параметр certificate
не является сертификатом. Сервер возвращает ошибку с сообщением:
{ "errorCode": "13", "errorMessage": "Передан некорректный параметр certificate" }
Кроме того, возможен вывод ошибки, если сертификат в период между прохождением верификации и непосредственно подписью стал просроченным, отозванным, либо не может быть проверен, стал недоступен центр сертификации, не найдена цепочка корневых сертификатов.
Аналогично, возможен вывод ошибки, если в период между получением подписываемых данных и непосредственно подписью эти самые подписываемые данные были изменены.