Assalam Docs

Ошибки

Форма ответа об ошибке, коды отказов и что показывать клиенту

Отказ банка — это успешный HTTP-ответ с failureCode внутри. Ошибка запроса — это HTTP-код.

Два разных вида ошибок

Ошибка запроса — вы отправили что-то не то или сейчас нельзя: приходит HTTP-код 4xx или 5xx и объект error всегда одной формы: type — род ошибки, code — машинный код, message — объяснение для человека, param — поле, если ошибка относится к конкретному, и request_id.

Ветвитесь по type и code, а не по тексту message: текст мы можем уточнить в любой момент, коды — нет.

Ошибка запроса
{
  "error": {
    "type": "idempotency_error",
    "code": "idempotency_key_reused",
    "message": "Idempotency-Key уже использован с другим телом запроса",
    "request_id": "req_4f2c8a1b9d3e"
  }
}
Ошибка запроса · проверка полей
{
  "error": {
    "type": "invalid_request_error",
    "code": "parameter_invalid",
    "message": "pan должен состоять из 16 цифр",
    "param": "pan",
    "request_id": "req_4f2c8a1b9d3e"
  }
}

Отказ по платежу — запрос корректен, но банк не провёл операцию. HTTP-ответ успешный, статус платежа FAILED, причина в failureCode. Не обрабатывайте это как сбой интеграции.

Отказ при списании
{
  "id": "cmsr9x8y",
  "status": "FAILED",
  "failureCode": "DECLINED"
}

Идентификатор запроса

Каждый ответ содержит заголовок Request-Id, а в ошибках он ещё и в теле — error.request_id. Сохраняйте его в своих журналах.

Когда что-то пойдёт не так, назовите нам этот идентификатор — мы найдём ваш запрос за секунду. Без него разбор начинается с вопроса «когда примерно это было», и на него редко есть точный ответ.

Если вы пришлёте свой Request-Id, мы используем его вместо своего — так сквозная трассировка не рвётся на нашей границе.

HTTP-коды

КодКогда
400Неверные данные запроса — поле не прошло проверку
401Ключ отсутствует, неверен или отозван
403Действие запрещено: нет доступа к боевому режиму, запрос с чужого домена
404Объект не найден — или принадлежит другому продукту либо режиму
409Конфликт: повтор ключа с другим телом, платёж уже обрабатывается
410Сессия привязки истекла или закрыта
429Слишком много запросов
503Банковская рельса недоступна или не настроена

Причины отказов

Что показать клиенту и стоит ли повторять:

failureCodeСообщение клиентуПовтор
INSUFFICIENT_FUNDSНедостаточно средств на картеДа, позже
DECLINEDБанк отклонил операциюДругой картой
TIMEOUTПлатёж обрабатываетсяНет — дождитесь статуса
CARD_INACTIVEКарта заблокирована или неактивнаДругой картой
CARD_NOT_FOUNDКарта не найденаПроверьте номер
CARD_NOT_INDIVIDUALПодходят только карты физических лицДругой картой
EXPIRY_MISMATCHНеверный срок действия картыПроверьте срок
WRONG_CODEНеверный код из SMSДа, до 5 попыток
NOT_SUPPORTED—Операция недоступна на текущей рельсе: например частичный возврат или выплата

Никогда не показывайте клиенту технический код

INSUFFICIENT_FUNDS в интерфейсе выглядит как сбой. Переводите коды в понятные фразы — колонка «Сообщение клиенту» выше подойдёт как есть.

Дальше по теме

На этой странице