Интеграторлор үчүн куму аянтчаСистема бөгөт менен жооп берет: протокол чыныгы, маалымат ойдон чыгарылган, сыртка эч нерсе кетпейт.
Өзүнчө sandbox.nasyya.ilim.gov.kg контуру жок. Бул стенд тышкы системалардын орун басарлары менен иштейт — ал өзү куму аянтча. Төмөнкү абал жайгаштырылган тиркеменин жөндөөлөрүнөн окулат.
- Негизги дарекЖөнгө салуу учурунда интеграцияңыз иштей турган дарек. Кум чөйрөсү менен согуштук контурдун коду ушул дарек менен гана айырмаланат.
- http://api:8000
- Вебхуктардын колтамгасыКолтамганын аталышы жана алгоритми. Колтамга JSON талданганга чейин, суроо-талаптын чийки денеси боюнча эсептелет.
- HMAC-SHA256 · X-Signature
- Документтин эң чоң көлөмүБул өлчөмдөн чоң файлды портал кум чөйрөсүндө да, согуштук контурда да кабыл албайт: чектөө бирдей.
- 10 МБ
Тышкы контурларКайсы тышкы системалар чындап туташтырылганы жана кайсылары бөгөт менен жооп бере тургандыгы. Бөгөт ошол эле протокол боюнча жооп берет, бирок андагы маалымат ойдон чыгарылган.
- ЕСИ «Түндүк»орун басарСистема бөгөт менен жооп берет: протокол чыныгы, маалымат ойдон чыгарылган, сыртка эч нерсе кетпейт.
Вход по ПИН без реального ЕСИ: любой корректный ПИН создаёт пользователя. Подписи запросов нет.
- Bilim API (student.ilim.gov.kg)орун басарСистема бөгөт менен жооп берет: протокол чыныгы, маалымат ойдон чыгарылган, сыртка эч нерсе кетпейт.
Данные об учёбе выдаются заглушкой: КНУ, контрактная форма, сумма контракта 65 000 сом.
- Исходящие сообщения банкаморун басарСистема бөгөт менен жооп берет: протокол чыныгы, маалымат ойдон чыгарылган, сыртка эч нерсе кетпейт.
Сообщения складываются в очередь и помечаются доставленными без реального вызова банка. Очередь, ретраи и дедлеттеры работают.
- Входящие вебхуки банковорун басарСистема бөгөт менен жооп берет: протокол чыныгы, маалымат ойдон чыгарылган, сыртка эч нерсе кетпейт.
Подпись не проверяется — присылайте события без заголовка подписи. Идемпотентность по event_id действует и здесь.
Түндүк эмулятору
Түндүктө тесттик контур жок, ошондуктан куму аянтча өзүнүн коопсуздук серверинин эмуляторун кармайт. Ал чыныгы протокол боюнча жооп берет: ошол эле баш аталыштар, ошол эле каталардын коддору, ошол эле талаалардын аттары. Тесттик ПИН топтому жана каталык режимдери ошол эмулятордон окулат.
| ПИН | Абалы |
|---|---|
| учится | |
| академический отпуск | |
| отчислен | |
| умер, есть акт о смерти | |
| паспорт недействителен | |
| нет в реестре |
curl -sS -i \ -H 'X-Road-Client: central-server/GOV/23997800/kredit' \ 'http://xroad-sim:8080/r1/central-server/GOV/70000005/passport-service/passportStatus/v1?pin=10101199000101'
Эмулятор сыртка чыгарылбайт: ал тиркемеге гана тармактагы аты боюнча жооп берет. Команданы анын дареги көрүнгөн жерден — api контейнеринен же ошол эле машинадан — аткарыңыз. -i ачкычын калтырыңыз: X-Road-Id жана X-Road-Error баш аталыштар менен келет.
Чакыруу мисалдарыДаяр чакыруулар: ошол бойдон көчүрүлөт жана бул дарекке карата оңдоосуз иштейт.
- Условия банковGET/api/v1/banks/products
Открыто без входа — витрина лендинга берёт условия отсюда.
- Перечень кодов ошибокGET/api/v1/errors
Собирается из кода приложения и из разбора ошибок Түндүк. Здесь видно, чем «нет ACL» (403) отличается от «регистр лежит» (502) и от «повторите» (503).
- Вход в демонстрационной ролиPOST/api/v1/auth/demo/student
Демонстрационный вход работает только в песочнице; на боевом контуре маршрута нет вовсе (404). Сессия — в cookie kredit_session, дальше её носит -b cookies.txt. Обычный вход — POST /api/v1/auth/login с телом {"pin": "10101199000101"}.
Баскыч жок: мисал стенддин абалын өзгөртөт, жана сүрөттөмөнүн жанындагы басуу баракты жөн эле окуп жаткан адам үчүн байкалбай иштеп кетмек. Аны өзүңүз аткарыңыз.
- Данные об учёбе заявителяGET/api/v1/students/me
Требует сессии из предыдущего примера. max_amount — предельная сумма по регламенту, от неё считается запрашиваемая.
- Очередь заявок банкаGET/api/v1/bank/applications
Роль банка видит только свои заявки: отбор по коду банка пользователя, чужая заявка отвечает 404. Фильтры: status, university_code, overdue.
- Событие банкаPOST/api/v1/webhooks/bank/eldik
{ "event_id": "evt-0001", "event_type": "application.approved", "application_id": "<uuid заявки>", "comment": "Одобрено" }Типы событий: application.accepted, application.review, application.docs_required, application.approved, application.rejected, contract.signed, loan.issued, funds.disbursed. Повторная отправка с тем же event_id не меняет заявку второй раз. Вне заглушки нужен заголовок X-Signature.
- Подпись вебхука: тело → HMAC → заголовок → проверкаSHELLopenssl
# 1. Секрет: кабинет банка, POST /api/v1/bank/credentials/rotate. # Показывается один раз при выдаче. SECRET='...' # 2. Тело — ровно те байты, которые уйдут в запросе. Ни отступов, # ни перевода строки в конце: подпись считается по сырому телу. BODY='{"event_id":"evt-0002","event_type":"contract.signed","application_id":"<uuid заявки>"}' # 3. HMAC-SHA256 по этим байтам, шестнадцатеричный нижний регистр. SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$SECRET" -hex | awk '{print $NF}') # 4. Подпись уходит заголовком X-Signature. # --data-binary, а не -d: -d выкидывает переводы строк и меняет # байты, а вместе с ними и подпись — сервер ответит 401. curl -sS -X POST "http://api:8000/api/v1/webhooks/bank/eldik" \ -H 'Content-Type: application/json' \ -H "X-Signature: $SIG" \ --data-binary "$BODY" # 5. Проверка на сервере — тот же расчёт по сырому телу и сравнение # постоянного времени. Несовпадение → 401 «Неверная подпись # запроса», отсутствие заголовка → 401 «Отсутствует подпись».Подпись считается по сырому телу до разбора JSON: пересобранный JSON даёт другие байты и другую подпись. В песочнице (KREDIT_WEBHOOK_STUB=1) подпись не проверяется — сценарий нужен для боевого контура, и отладить его лучше здесь.
Баскыч жок: мисал стенддин абалын өзгөртөт, жана сүрөттөмөнүн жанындагы басуу баракты жөн эле окуп жаткан адам үчүн байкалбай иштеп кетмек. Аны өзүңүз аткарыңыз.