Лимиты, статусы и ошибки#
Эта статья описывает ограничения внешнего API, статусы завершения операции и поведение приложения при ошибке и отмене.
Содержание:
Лимиты#
| Что ограничивается | Значение |
|---|---|
| Ожидающие вызовы API | 8; выполняются последовательно |
| Один запрос: параметры, файл или результат | 600 секунд |
| Сообщение сервису об ошибке или отмене | 10 секунд |
| Установка соединения с сервером | 30 секунд |
| Ожидание действия пользователя | 5 минут |
| Ответ сервиса, встроенный JSON или локальный файл | 64 МиБ |
| Один входной файл | 512 МиБ |
| Все входные файлы одной операции | 512 МиБ и не более 100 файлов |
| Транспортный ZIP-архив | Не более 100 записей и 512 МиБ распакованных данных |
| Данные, встроенные в один JSON-результат в Base64 | 64 МиБ суммарно |
Повторный вызов отклоняется, пока предыдущий не завершён. Вызовы различаются по источнику, команде и идентификатору транзакции, а вызов со ссылкой на файл параметров — по пути к этому файлу.
Base64 увеличивает объём передачи примерно на треть. Для больших результатов используйте multipart/form-data или returnFiles: false.
Время ожидания запроса и время ожидания действия пользователя отсчитываются независимо. Общего времени ожидания у сессии нет: прервать запущенную криптографическую операцию безопасно невозможно.
Статусы операции#
status | Значение |
|---|---|
Completed | Операция завершена; результат может описывать недействительную подпись |
Error | Техническая или операционная ошибка |
Canceled | Пользователь отказался от выполнения или отменил операцию |
Для Error дополнительно передаются Error: true и ErrorDescription. Частичный успех проверки подписи сохраняет доступные результаты и сообщает ошибку для неуспешной части. Остальные операции signAndEncrypt частичных результатов не отправляют — см. Необработанные файлы.
ErrorDescription содержит стабильные коды приложения — например, x509.sign.failed или x509.verify.invalidSignature. Сообщения криптографических библиотек в контракт не входят: они остаются в лог-файле и в журнале приложения.
💡 Примечание: недействительная подпись — это результат проверки, а не ошибка. Конверт имеет
status: "Completed", аsignValidиsigners[].isValid— значениеfalse.
Ошибки и отмена#
Если поддерживаемая сетевая команда уже прошла проверку доверия, приложение отправляет сообщение об ошибке, чтобы сервис не оставался в ожидании.
Если обработчик команды ещё не сформировал результат, сообщение уходит на исходный адрес — тот, с которого получены параметры, а не на uploader, — методом <команда>.parameters. Статус в нём всегда Canceled, какой бы ни была причина, а сама причина передаётся в ErrorDescription:
{
"jsonrpc": "2.0",
"method": "signAndEncrypt.parameters",
"id": "tx-42",
"params": {
"status": "Canceled",
"Error": true,
"ErrorDescription": "Operation failed"
}
}
Метод и текст сообщения зависят от этапа и причины:
| Когда | method |
|---|---|
| Параметры не получены или не прошли проверку | <команда>.parameters |
certificates: ошибка или отмена после чтения параметров | certificates.base64, certificates.import или certificates.information — по операции |
signAndEncrypt: ошибка или отмена после чтения параметров | signAndEncrypt.outDirectResults или signAndEncrypt.verifySignResults |
| Приложение закрыто до завершения вызова | Метод текущего этапа: до чтения параметров <команда>.parameters (для signAndEncrypt — signandencrypt.parameters), после — метод результата |
| Причина | ErrorDescription |
|---|---|
| Пользователь отменил операцию или закрыл её окно | Operation canceled |
Пользователь отказал в diagnostics или отменил certrequests | Access denied |
| Пользователь не доверил сервис | Access denied |
| Пользователь закрыл приложение до завершения вызова | App closed |
| Остальные ошибки | Описание причины |
Отказ в доверии сообщается только сервису, который обратился впервые: пользователь нажал Отмена, закрыл окно подтверждения или не ответил за 5 минут. Сервис от этого доверенным не становится. Если у уже доверенного сервиса сменился сертификат и пользователь отказал, сообщение не отправляется.
На вызов команды, которой в приложении нет, приложение отвечает только доверенному сервису, чей сервер по-прежнему предъявляет сохранённый ключ. Окно подтверждения при этом не показывается. Сервис получает <команда>.parameters со статусом Canceled и ErrorDescription: "Command is not supported: <команда>". Для sendMail, saveDocuments, authorize и mtlsAuthorization метод — sendMail.parameters, documents.parameters, authorize.parameters и mtlsAuthorization.parameters.
При выходе из приложения App closed получают выполняемый вызов и локальные вызовы, ждущие в очереди. Сетевой вызов получает сообщение, только если уже прошёл проверку доверия и вход пользователя; сетевые вызовы в очереди завершаются без сообщения. Доставка не гарантируется: приложение не ждёт её завершения.
Ошибка TLS или сертификата при проверке доверия, неизвестная команда от недоверенного сервиса и недоступный адрес завершаются без сообщения. Вызывающая сторона должна иметь собственный таймаут и обрабатывать повторный вызов идемпотентно.
При закрытии или перезагрузке окна операция отменяется до обращения к криптопровайдеру. Уже запущенная операция не отменяется.
Завершение вкладки операции#
Если задан uploader и результат успешно доставлен, вкладка операции закрывается автоматически, а временные файлы удаляются. Исключение — VERIFYSIGN: результат проверки остаётся на экране. В остальных случаях результат остаётся во вкладке, пока пользователь её не закроет.
Смотрите также#
- Описание и возможности API — общий формат вызова.
- Транспорт и доверие — проверка сервиса и адресов.
- Команда signAndEncrypt — форматы результата операции.