Works with API of Portal5.
Работа с Portal5 по API.
Appsettings с именем исполняемой программы - в отличие от принятого при разработке в .NET единого имени, так можно все файлы настроек разных программ размещать в одной папке для скриптов, но при этом какие-то общие параметры (будут иметь приоритет) вынести из папки с программой, где они могут быть нечаянно затерты при обновлении версии или конфиденциальная информация может попасть в дистрибутивный архив:
CryptoBot.config.json(located with Appexe)%ProgramData%\Diev\CryptoBot.config.json(these settings overwrite if exist)
Однако, при запуске в Linux программа может не получать путь к папке
с программой - тогда она будет искать традиционный appsettings.json
в текущей папке.
Windows Credential Manager в Панели управления - Диспетчер учетных данных (все пароли для всех программ меняются в одном месте и скрыты от пользователей, как было бы при хранении в индивидуальных файлах настроек к каждой программе):
Portal5test *(name:Portal5test https://{host}, user:{username}, pass:{password})Portal5 *(name:Portal5 https://{host}, user:{username}, pass:{password})CryptoPro My(name:CryptoPro My, user:{cert}, pass:{pin})SMTP *(name:SMTP {host} {port} tls, user:{sender}, pass:{password})
Однако в Linux такой программы нет, и все параметры надо написать в JSON открытым текстом (в Windows тоже так можно, игнорируя безопасность):
"TargetName": "https://{host} {username} {password}"(три параметра)"CryptoName": "cert {cert} {pin}"(три параметра, первый игнорируется)"SmtpName": "{host} {port} tls {sender} {password}"(4-5 параметров)
При наличии (в Windows) КриптоПро можно указать, какая утилита командной строки будет использоваться (важно для больших файлов и в случае необходимости прикладывания всей цепочки сертификатов к подписи):
"UtilName": "CspTest"- бесплатная тестовая утилита из состава КриптоПро CSP"UtilName": "CryptCP"- утилита для больших файлов (приобретается отдельно, должна соответствовать установленной версии КриптоПро CSP)
По окончании работы программа разошлет уведомления подписчикам, которые
указаны в массиве строк e-mail в поле Subscribers к каждой задаче.
Если не нужно - укажите null. Или можно указать один адрес вместо массива,
или в одной строке - с разделением запятыми.
Используйте --help, чтобы получить все актуальные параметры командной строки:
Обратите внимание, что параметры могут меняться и оптимизироваться от версии
к версии без отдельного предупреждения и отражения в этом файле!
Description:
Exchange point to upload/download with Portal5.
Usage:
CryptoBot [command] [options]
Options:
--version Show version information
-?, -h, --help Show help and usage information
Commands:
lki ЛК: Входящие
lko ЛК: Исходящие
z130 ЗСК: Получение информации об уровне риска ЮЛ/ИП
z137 ЗСК: Ежедневное информирование Банка России о составе и объеме клиентской базы
z222 ZBR: Получение Запроса информации о платежах КО
z221 ZBR: Ответ на Запрос информации о платежах КО
load API: Загрузить сообщения по <id> или по фильтру
clean API: Удалить сообщения по <id> или по фильтруDescription:
ЛК: Входящие
Usage:
CryptoBot lki [options]
Options:
-d, --days <days> Сколько последних дней (7 - на этой неделе)Description:
ЛК: Исходящие
Usage:
CryptoBot lko [options]
Options:
-d, --days <days> Сколько последних дней (7 - на этой неделе)Description:
Получение информации об уровне риска ЮЛ/ИП
Usage:
CryptoBot z130 [options]
Options:
-d, --days <days> Сколько последних дней (7 - на этой неделе)Description:
Ежедневное информирование Банка России о составе и объеме клиентской базы
Usage:
CryptoBot z137 [options]
Options:
-d, --days <days> Сколько последних дней (7 - на этой неделе)Description:
Получение Запроса информации о платежах КО
Usage:
CryptoBot z222 [options]
Options:
-d, --days <days> Сколько последних дней (7 - на этой неделе)Description:
Ответ на Запрос информации о платежах КО
Usage:
CryptoBot z221 [options]
Options:
--req <req> Идентификатор Запроса (guid)По команде load --help, где надо указать или id, или условия фильтра:
Description:
API: Загрузить сообщения по <id> или по фильтру
Usage:
CryptoBot load [options]
Options:
--id <id> Идентификатор одного сообщения (guid)
-z, --zadacha <zadacha> Номер задачи XX[,XX, ...]
-b, --before <before> Ранее скольки дней назад (7 - раньше недели назад)
-d, --days <days> Сколько последних дней (7 - на этой неделе)
-n, --day <day> Какой день назад конкретно (1 - вчера)
-f, --min-date <min-date> С какой даты (yyyy-mm-dd[Thh:mm:ssZ])
-t, --max-date <max-date> До какой даты (время по умолчанию 00:00!)
--min-size <min-size> От какого размера (байты)
--max-size <max-size> До какого размера (байты)
--inbox Входящие сообщения только
--outbox Исходящие сообщения только
--status <status> Статус сообщений
для inbox: new, read, replied
для outbox: draft, sent, delivered, error, processing, registered, rejected, success
--page <page> Номер страницы (по 100 сообщений)Description:
API: Удалить сообщения по <id> или по фильтру
Usage:
CryptoBot clean [options]
Options:
--id <id> Идентификатор одного сообщения (guid)
-z, --zadacha <zadacha> Номер задачи XX[,XX, ...]
-b, --before <before> Ранее скольки дней назад (7 - раньше недели назад)
-d, --days <days> Сколько последних дней (7 - на этой неделе)
-n, --day <day> Какой день назад конкретно (1 - вчера)
-f, --min-date <min-date> С какой даты (yyyy-mm-dd[Thh:mm:ssZ])
-t, --max-date <max-date> До какой даты (время по умолчанию 00:00!)
--min-size <min-size> От какого размера (байты)
--max-size <max-size> До какого размера (байты)
--inbox Входящие сообщения только
--outbox Исходящие сообщения только
--status <status> Статус сообщений
для inbox: new, read, replied
для outbox: draft, sent, delivered, error, processing, registered, rejected, success
--page <page> Номер страницы (по 100 сообщений)Документация на REST-API по Portal5 (ЕПВВ) находится по адресу https://www.cbr.ru/lk_uio/guide/rest_api/.
В программе реализованы по документу "30.09.2023 Описание внешнего взаимодействия. Технические условия внешнего обмена. Версия 2.4" все актуальные разделы 3.1.3-3.1.6.
Программа получает с портала всю справочную информацию и решает следующие
конкретные задачи (названия приведены по справочнику задач tasks):
Zadacha_2-1- Ответ на запрос, предписание. Запрос в Банк России. Квитанции из ВП ЕПВВZadacha_3-1- Запрос, предписание. Ответ на запрос НФО. Квитанции из САДДZadacha_54- Запросы ЦИКZadacha_130- Получение информации об уровне риска ЮЛ/ИПZadacha_137- Ежедневное информирование Банка России о составе и объеме клиентской базы (ФПС "Отчетность")Zadacha_221- Ответ на Запрос информации о платежах КОZadacha_222- Запрос информации о платежах КО- Очистка сообщений отчетности ПП Дельта в
inbox:Zadacha_97- Извещение о результатах контроля информации о ВПОДК и их результатах (ИЭС1)Zadacha_107- Извещение о результатах контроля отчетности субъектов НПС (ИЭС1)Zadacha_114- Извещение о результатах контроля представления формы 0409310 (ИЭС1)Zadacha_123- Извещение о результатах контроля представления формы 0409310 (ИЭС2)Zadacha_130- Получение информации об уровне риска ЮЛ/ИПZadacha_133- Извещение о результатах контроля отчетности субъектов НПС (ИЭС2)Zadacha_140- Извещение о результатах контроля информации о ВПОДК и их результатах (ИЭС2)Zadacha_156- Извещение о результатах контроля представления формы 0409601 отчет ко(нко) (ИЭС1) и др.Zadacha_159- Извещение о результатах контроля представления формы 0409601 отчет ко(нко) (ИЭС2) и др.
- Очистка сообщений отчетности ПП Дельта в
outbox:Zadacha_155- Представление отчетности КО в Банк России
Легко добавить и остальные по потребности. На данный момент их уже больше.
К каждой задаче в API может применяться фильтр дат (в программе некоторые зафиксированы на 14 или 30 дней - по смыслу).
По завершении каждой операции подписчикам отправляются уведомления по e-mail.
Получение подписчиками уведомлений на email о входящих сообщениях с вложенным PDF и краткой информацией о документе (и на что он ссылается, если есть):
CryptoBot lki
Получение сводной информации о всех зарегистрированных исходящих:
CryptoBot lko
Если робот не работал несколько дней, то можно перезапросить за неделю:
CryptoBot lki -d 7
Робот скачает и распакует только недостающее. Параметр влияет только на глубину просмотра. По умолчанию - только за текущий день.
Получение последнего реестра (Zadacha_130):
CryptoBot z130
Отправка перечня клиентов (Zadacha_137):
CryptoBot z137
При необходимости отправить файл не текущей даты, можно указать число дней
для просмотра назад в поисках последнего: 1 - вчера, 7 - за неделю.
Получение запросов (Zadacha_222):
CryptoBot z222
Отправка ответов на запрос (Zadacha_221):
CryptoBot z221 --req d55cdbbb-e41f-4a2a-8967-78e2a6e15701
Скачивание конкретного сообщения (указать его Id или URL
с окончанием на Id):
CryptoBot load d55cdbbb-e41f-4a2a-8967-78e2a6e15701
Скачивание Входящих писем из ЛК (Zadacha_3-1) по фильтру дат (за сегодня):
CryptoBot load -z 3-1 -d
Скачивание Входящих писем из ЛК (Zadacha_3-1) по фильтру дат (за вчера):
CryptoBot load -z 3-1 -d 1
Скачивание Исходящих писем из ЛК (Zadacha_2-1) по фильтру дат (за 2023):
CryptoBot load -z 2-1 -f 2023-01-01 -t 2023-12-31
Скачивание запросов ЦИК (Zadacha_54) по фильтру дат (с начала июля):
CryptoBot load -z 54 -f 2024-07-01
Скачивание всех сообщений обмена для архива:
CryptoBot load -z 2-1,3-1,54,130,137
При необходимости даты можно уточнить временем по полному формату
yyyy-mm-ddThh:mm:ssZ. Контроль ошибок указания такой строки не ведется,
но сервер вернет ошибку 400 - "Некорректное значение параметра запроса"
в таком случае.
Будьте осторожны с указанием фильтра: сервер ограничивает выдачу - не
более 100 сообщений за раз, но программа попытается скачать все, попадающее
в условия фильтра, без ограничений. Для получения сообщений страницами по
100 - используйте параметр фильтра --page N, где N от 1.
Если стоит CryptoPro CSP, то все скачанные пакеты можно расшифровать для помещения на хранение. Если в скачиваемом периоде менялись ключи, то можно указать предыдущие через запятую.
После скачивания можно очистить место в ЛК.
Очистка ЛК от служебной информации ПП Дельта. В коде зафиксировано оставить последние 30 дней (на самом деле и они не нужны - все есть в самой ПП Дельта).
CryptoBot clean -z 97,107,114,123,133,140,156,169,155 -b 30
- .NET 8-9-10 Runtime / Desktop Runtime
- CryptoPro CSP и CryptCP (опционально - для криптоопераций)
Build an app with many dlls.
В папке дистрибутива будет exe и очень много сопутствующих отдельных
dll - вариант разработки в .NET по умолчанию:
dotnet publish CryptoBot\CryptoBot.csproj -o Distr
Build a single-file app when NET Desktop runtime required.
Будет один исполняемый файл exe, но требуется установка .NET -
предпочитаемый мною вариант:
dotnet publish CryptoBot\CryptoBot.csproj -o Distr -r win-x64 -p:PublishSingleFile=true --no-self-contained
Build a single-file app when no runtime required. Вариант, когда .NET устанавливать не нужно - всё есть в одном большом файле, который можно перенести в закрытую систему, где ничего устанавливать нельзя:
dotnet publish CryptoBot\CryptoBot.csproj -o Distr -r win-x64 -p:PublishSingleFile=true
Build an app on Windows and transfer binary files to Linux. Вариант, когда папку с файлами, собранную на Windows, можно просто перенести на Linux и там запустить, ничего там не устанавливая:
dotnet publish CryptoBot\CryptoBot.csproj -o Distr -r linux-x64 --self-contained
Для использования одного/нескольких из этих вариантов можно применять
build.cmd - он создаст нужный дистрибутив(ы) с архивом исходных файлов
текущей версии.
Номер версии программы указывается по нарастающему принципу:
- Протестированная максимальная версия .NET (10);
- Год текущей разработки (2025);
- Месяц без первого нуля и день редакции (1112 - 12.11.2025);
- Номер билда - просто нарастающее число для внутренних отличий. Если настроен сервис AppVeyor, то это его автоинкремент.
Продукт развивается для собственных нужд, а не по коробочной стратегии, и поэтому Breaking Changes могут случаться чаще, чем это принято в SemVer.
Licensed under the Apache License, Version 2.0.
Вы можете использовать эти материалы под свою ответственность.