Обработка ошибок и таймаутов
Обработка ошибок и отказов
Заголовок раздела «Обработка ошибок и отказов»Gateway Connect разделяет системные ошибки (сервер провайдера недоступен, таймаут) и бизнес-отказы (банк отклонил карту, недостаточно средств).
Важное правило: Gateway всегда возвращает HTTP 200, даже если транзакция отклонена. Статус транзакции определяется содержимым JSON-ответа, а не HTTP-кодом.
Сценарий 1: Системная ошибка (провайдер вернул HTTP 4xx / 5xx)
Заголовок раздела «Сценарий 1: Системная ошибка (провайдер вернул HTTP 4xx / 5xx)»Если провайдер недоступен или вернул ошибку, Gateway логирует её в logs и возвращает HTTP 200 с result: false:
{ "result": false, "error": "Provider returned HTTP 502 – Bad Gateway", "logs": [...]}Транзакция остаётся в статусе «в обработке». Окончательный статус будет получен позже через POST /callback или POST /status.
Сценарий 2: Сетевой таймаут
Заголовок раздела «Сценарий 2: Сетевой таймаут»Таймаут запроса к провайдеру: 15 секунд по умолчанию.
Настраивается индивидуально для каждого метода в gateway_settings.methods.<method>.response_timeout (см. Настройки и Статусы).
При превышении таймаута Gateway возвращает HTTP 200 с result: false и code: 408.
Сценарий 3: Soft Decline (HTTP 200, бизнес-отказ)
Заголовок раздела «Сценарий 3: Soft Decline (HTTP 200, бизнес-отказ)»Business Service определяет отказ, если в ответе Gateway обнаружено любое из трёх условий:
result: falsestatus: "declined"- Наличие ключа
errorв корне ответа
Причина отказа (declination_reason)
Заголовок раздела «Причина отказа (declination_reason)»Business Service извлекает текст причины из одного из полей ответа в следующем порядке:
declination_reasondetailsreasonerror
Сообщение сохраняется с префиксом gateway response error:.
Пример бизнес-отказа (банк отклонил):
{ "result": true, "status": "declined", "details": "Insufficient funds", "logs": [...]}Пример системного отказа (ошибка в Gateway):
{ "result": false, "error": "Card token validation failed inside gateway", "logs": [...]}