Обработка ошибок и рекомендации#

Руководство по обработке ошибок при интеграции с API Sagi.


Коды ошибок HTTP#

2xx - Успешные ответы#

  • 200 OK - Запрос выполнен успешно

  • 201 Created - Ресурс создан (например, транзакция)

4xx - Ошибки клиента#

  • 400 Bad Request - Неверный формат данных или параметров

  • 401 Unauthorized - Отсутствует или недействителен токен авторизации

  • 403 Forbidden - Недостаточно прав доступа

  • 404 Not Found - Ресурс не найден (например, пользователь)

  • 429 Too Many Requests - Превышен лимит запросов

5xx - Ошибки сервера#

  • 500 Internal Server Error - Внутренняя ошибка сервера

  • 502 Bad Gateway - Ошибка шлюза

  • 503 Service Unavailable - Сервис временно недоступен

  • 504 Gateway Timeout - Таймаут запроса


Специфичные коды ошибок Sagi#

Пользователи и аутентификация (100-999)#

Аутентификация#

{
  "code": 401,
  "message": "authentication error"
}
{
  "code": 401,
  "message": "invalid login or password"
}
{
  "code": 401,
  "message": "invalid license"
}
{
  "code": 404,
  "message": "failed creating token"
}

Пользователи#

{
  "code": 100,
  "message": "user not registered"
}
{
  "code": 403,
  "message": "wrong address identifier received"
}
{
  "code": 409,
  "message": "invalid gender provided"
}
{
  "code": 410,
  "message": "error format Birthday"
}
{
  "code": 411,
  "message": "user is not promoter"
}
{
  "code": 427,
  "message": "invalid length user code"
}
{
  "code": 428,
  "message": "can't find user by code"
}

Транзакции и заказы (3000-3999)#

Доступ и права#

{
  "code": 3000,
  "message": "denied access for provided order"
}

Суммы и лимиты#

{
  "code": 3001,
  "message": "amount is less than minimum amount"
}
{
  "code": 3002,
  "message": "amount is greater than maximum amount"
}
{
  "code": 3006,
  "message": "invalid order amount"
}

Состояние заказов#

{
  "code": 3013,
  "message": "invalid order state"
}
{
  "code": 3014,
  "message": "no such order in database"
}
{
  "code": 3015,
  "message": "order was manually reverted"
}
{
  "code": 3017,
  "message": "order already declined"
}
{
  "code": 3020,
  "message": "order time expired"
}
{
  "code": 3024,
  "message": "order is unable to revert"
}

Бонусы и баланс#

{
  "code": 3023,
  "message": "user private balance is not enough"
}
{
  "code": 3025,
  "message": "code for using private balance is wrong"
}

Ошибки интеграции с Epay#

{
  "code": 3010,
  "message": "epay integration error"
}
{
  "code": 3200,
  "message": "authorization error, invalid 3dsecure"
}
{
  "code": 3201,
  "message": "not permitted to client by his bank"
}
{
  "code": 3202,
  "message": "no such card"
}
{
  "code": 3203,
  "message": "not sufficient funds in his card"
}
{
  "code": 3204,
  "message": "card is expired"
}
{
  "code": 3206,
  "message": "exceeds withdrawal amount limit"
}

Филиалы (4000-4999)#

Права доступа#

{
  "code": 4000,
  "message": "no permission to create branch"
}
{
  "code": 4001,
  "message": "no permission to update branch"
}
{
  "code": 4033,
  "message": "no permission to view customers"
}
{
  "code": 4034,
  "message": "no permission to view transactions"
}

Конфигурация филиала#

{
  "code": 4003,
  "message": "branch with specified id not found"
}
{
  "code": 4004,
  "message": "contract rules for branch were not specified"
}
{
  "code": 4051,
  "message": "branch is disabled"
}
{
  "code": 4064,
  "message": "private cashback is not activated for the branch"
}

Безопасность и черные списки#

{
  "code": 4052,
  "message": "клиент в черном списке"
}
{
  "code": 4053,
  "message": "превышен лимит дневной транзакции"
}

Программы лояльности#

{
  "code": 4037,
  "message": "the title of the award cannot be empty"
}
{
  "code": 4038,
  "message": "the stamp count of the award cannot be empty"
}
{
  "code": 4039,
  "message": "the number of awards received is less than the required number of awards"
}

Промокоды#

{
  "code": 4057,
  "message": "промокод истек"
}
{
  "code": 4058,
  "message": "промокод уже был использован"
}
{
  "code": 4059,
  "message": "промокод не найден"
}

Телефоны и SMS (5000-5999)#

{
  "code": 5000,
  "message": "invalid phone length"
}
{
  "code": 5002,
  "message": "not supported platform"
}
{
  "code": 5005,
  "message": "query is too short"
}

Общие ошибки (10000+)#

{
  "code": 10000,
  "message": "no permission to this operation"
}
{
  "code": 10001,
  "message": "invalid uri path"
}
{
  "code": 10005,
  "message": "Неверные параметры"
}
{
  "code": 10006,
  "message": "Пользователя нет в черном списке"
}

Рекомендации по обработке ошибок#

1. Повторные попытки#

Повторять запрос только при временных ошибках:

  • HTTP 5xx (серверные ошибки)

  • HTTP 429 (превышен лимит запросов)

  • Сетевые таймауты

НЕ повторять при постоянных ошибках:

  • HTTP 4xx (ошибки клиента)

  • Коды ошибок связанные с бизнес-логикой (3xxx, 4xxx)

2. Логирование#

Обязательно логируйте:

  • Все ошибки с кодами 3xxx и 4xxx

  • Повторные попытки запросов

  • Операции с финансами (бонусы, транзакции)

3. Пользовательские сообщения#

Переводите коды ошибок в понятные сообщения:

  • 3025 → «Неверный код подтверждения»

  • 4052 → «Клиент в черном списке филиала»

  • 3023 → «Недостаточно бонусов для списания»

  • 4051 → «Филиал временно недоступен»

4. Graceful degradation#

При недоступности API бонусов:

  • Проводите операцию без бонусов

  • Сохраняйте данные для повторной обработки

  • Информируйте пользователя о временной недоступности