Ошибки

Ошибка — это HTTP-код не из 2xx и тело вида:

{
  "error": {
    "code": "validation_error",
    "message": "Некорректные параметры запроса",
    "details": { "issues": [{ "path": "amount", "message": "минимум 100 копеек (1 ₽)" }] }
  }
}

Ветвитесь по error.code. message написан для человека и может меняться.

HTTPcodeЧто делать
400invalid_jsonТело не JSON
401unauthorizedПроверьте ключ и заголовок Authorization
403merchant_disabledСервис отключён, обратитесь к администратору
403live_paymentСимуляция для live-платежа запрещена
404not_foundПлатёж не найден (или он из другого режима или сервиса)
409order_id_conflictПлатёж с этим order_id уже есть с другой суммой
409order_closedПлатёж с этим order_id уже завершён без оплаты, нужен новый order_id
409not_cancelableОтменить можно только pending
409not_refundableВернуть можно только succeeded / partially_refunded
409not_pendingПлатёж уже не ожидает оплаты
422validation_errorОшибки полей в details.issues (в т.ч. не передан customer.email / customer.phone)
422invalid_return_urlreturn_url должен быть https
422return_url_not_allowedХост return_url не в allowed_return_hosts сервиса
422receipt_mismatchСумма позиций чека не равна amount
422receipt_contact_requiredДля чека нужен email или телефон
422invalid_refund_amountСумма возврата больше остатка
500internal_errorОшибка у нас. Повторите позже
502provider_errorТ-Банк вернул ошибку, код в details.provider_code. Платёж не создан, можно повторить с тем же order_id
503provider_not_configuredБоевой терминал не настроен в EGN Pay

Ретраи

Повторять безопасно:

  • POST /payments с тем же order_id: дубля не будет;
  • любые GET;
  • 502, 500 и сетевые таймауты, лучше с экспоненциальной задержкой.

Не повторяйте 4xx без исправления запроса.

Markdown-версия этой страницы: /docs/errors.md