Полностью по API
Максимальный контроль — вы сами отрисовываете UI на основе данных из API. Подходит, когда нужно полностью встроить процесс в ваш интерфейс.
Схема работы
sequenceDiagram
participant F as Ваш фронтенд
participant B as Ваш сервер
participant D as DEBEX API
B->>D: POST /api/Sessions/start
D-->>B: SessionDto (elements[])
B->>F: Отрисовать форму
loop Пока is_completed = false
F->>B: Ввод данных
B->>D: POST /api/Sessions/{id}/process
D-->>B: SessionDto (следующий шаг)
B->>F: Обновить форму
end
D-->>B: is_completed: true, cookies[]
B->>F: Готово! cookies[]
Шаг 1. Создать сессию
curl -X POST https://sessions-api.explorer.debex.ru/api/Sessions/start \
-H "Content-Type: application/json" \
-d '{"flow_id": "b3f70e2e-ed61-4145-a2ed-f69a459a8934"}'
Ответ — SessionDto с первым шагом:
{
"session_id": "a1b2c3d4-...",
"token": "eyJhbGciOi...",
"step_name": "Ввод логина",
"step_description": "Введите номер телефона или email",
"elements": [
{
"code": "login",
"type": "input",
"name": "Логин",
"value": "",
"is_masked": false
}
],
"is_completed": false,
"is_failed": false,
"expires_in_seconds": 300
}
Шаг 2. Отрисовать элементы формы
На основе массива elements постройте форму. Типы элементов:
input — текстовое поле
{ "code": "login", "type": "input", "name": "Логин", "is_masked": false }
Если is_masked: true — используйте <input type="password">.
select — выпадающий список
{ "code": "region", "type": "select", "name": "Регион", "options": ["Москва", "Санкт-Петербург"] }
input_combined — OTP / посимвольный ввод
{ "code": "otp", "type": "input_combined", "name": "Код из SMS", "length": 6 }
Отрисуйте length отдельных полей по 1 символу. Значение отправляйте как одну строку.
error — сообщение об ошибке
{ "code": "error", "type": "error", "name": "Неверный пароль" }
Просто покажите пользователю. Отправлять ничего не нужно.
info — информационное сообщение
{ "code": "info", "type": "info", "name": "Ожидайте SMS..." }
Шаг 3. Отправить данные
Соберите значения из формы и отправьте:
curl -X POST https://sessions-api.explorer.debex.ru/api/Sessions/{id}/process \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"input_data": {
"login": "user@example.com"
}
}'
Ключи в input_data — это значения code из элементов. Элементы с типами error и info не отправляются.
Ответ — обновлённый SessionDto со следующим шагом или результатом.
Шаг 4. Повторять до завершения
Повторяйте шаги 2-3, пока is_completed не станет true. После этого в поле cookies будет массив cookies.
Реалтайм-обновления через SignalR
Вместо поллинга можно подписаться на события через SignalR:
const connection = new signalR.HubConnectionBuilder()
.withUrl("https://sessions-api.explorer.debex.ru/hubs/sessions", {
accessTokenFactory: () => sessionToken
})
.build();
connection.on("StepChanged", (message) => {
// message.payload — SessionDto с новым шагом
renderForm(message.payload.elements);
});
connection.on("SessionCompleted", (message) => {
// message.payload.cookies — готовые cookies
handleCookies(message.payload.cookies);
});
connection.on("SessionFailed", (message) => {
showError("Сессия завершилась с ошибкой");
});
await connection.start();
Доступные события SignalR:
| Метод | Когда |
|---|---|
SessionStarted |
Сессия создана |
SessionCompleted |
Процесс завершён, cookies доступны |
SessionFailed |
Ошибка или таймаут |
StepChanged |
Переход к следующему шагу |
SessionRestarted |
Сессия перезапущена |
Дополнительные эндпоинты
| Метод | Эндпоинт | Описание |
|---|---|---|
GET |
/api/Sessions/{id} |
Получить текущее состояние сессии |
POST |
/api/Sessions/{id}/restart |
Перезапустить сессию |
GET |
/api/Sessions/{id}/debug |
Отладочная информация (скриншот, HTML) |