# Жизненный цикл ордера Ордер проходит через несколько статусов от создания до завершения. ## Диаграмма статусов ``` ┌─────────────┐ │ prepare │ │ (котировка)│ └──────┬──────┘ │ accept ▼ ┌─────────────┐ │ created │ └──────┬──────┘ │ ▼ ┌─────────────┐ │ in_progress │ └──────┬──────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ success │ │ failed │ │ expired │ └──────┬──────┘ └──────┬──────┘ └─────────────┘ │ │ └───────┬───────┘ ▼ ┌─────────────┐ │ disputed │ └─────────────┘ ``` ## Статусы ### `created` Ордер создан после успешного `accept`. Средства зарезервированы. - **Следующий:** `in_progress` - **Действия:** Ожидание ### `in_progress` Платёж передан в обработку wallet-backend. - **Следующий:** `success`, `failed`, `expired_no_taker`, `expired_by_system` - **Действия:** Ожидание, мониторинг `paymentUntil` ### `success` Платёж успешно выполнен. QR-код оплачен. - **Следующий:** `disputed` (при открытии диспута) - **Действия:** Готово - **Поле:** `completedAt` заполнено ### `failed` Платёж не удался. - **Следующий:** `disputed` (при открытии диспута) - **Причины:** Ошибка банка, недоступность получателя, таймаут - **Поле:** `failureReason` содержит описание - **Средства:** Разблокированы, возвращены на баланс ### `expired_no_taker` Платёж не был взят в обработку. - **Причины:** Нет доступных исполнителей - **Средства:** Разблокированы ### `expired_by_system` Платёж отменён системой по таймауту. - **Причины:** Превышен `paymentUntil` - **Средства:** Разблокированы ### `disputed` Открыт диспут по ордеру. - **Доступно из:** `success`, `failed` - **Действия:** Ожидание решения администратора ## Webhook события При каждой смене статуса отправляется webhook: ```json { "event": "order.status_changed", "orderId": "550e8400-e29b-41d4-a716-446655440000", "status": "success", "amountUsdt": 52.63, "amountRub": 5000.00, "completedAt": "2026-03-10T12:00:45Z", "failureReason": null, "createdAt": "2026-03-10T12:00:00Z" } ``` ## Получение статуса ### Один ордер ```bash curl -X GET 'https://b2b.lumowallet.io/orders/{id}' \ -H 'X-API-Key: YOUR_API_KEY' ``` ### Список ордеров ```bash curl -X GET 'https://b2b.lumowallet.io/orders?status=success&limit=50' \ -H 'X-API-Key: YOUR_API_KEY' ``` Параметры фильтрации: - `status` — фильтр по статусу - `limit` — количество записей (1-200, default 20) - `offset` — смещение для пагинации ## Финальные статусы Следующие статусы являются финальными (изменение невозможно, кроме `disputed`): - `success` - `failed` - `expired_no_taker` - `expired_by_system` ## Рекомендации 1. **Подписывайтесь на webhooks** — не полагайтесь только на polling 2. **Проверяйте `paymentUntil`** — планируйте таймауты в UI 3. **Обрабатывайте все статусы** — включая expired и failed 4. **Логируйте `failureReason`** — для анализа ошибок