Skip to content
Last updated

Жизненный цикл ордера

Ордер проходит через несколько статусов от создания до завершения.

Диаграмма статусов

                    ┌─────────────┐
                    │   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:

{
  "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"
}

Получение статуса

Один ордер

curl -X GET 'https://b2b.lumowallet.io/orders/{id}' \
  -H 'X-API-Key: YOUR_API_KEY'

Список ордеров

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 — для анализа ошибок