ПРАВИЛА ИНТЕГРАЦИИ

Обработка ошибок

Для обработки ошибок проверяйте HTTP-статус, поле status и машинный код code. Текст message предназначен для пояснения: он может уточняться или переводиться, поэтому не используйте его как условие в коде.

Формат ответа

Передавайте заголовок Accept: application/json, чтобы получать ошибки в JSON. При явном предпочтении text/html сервис может вернуть HTML-страницу ошибки.

json
{
  "status": "error",
  "code": "DUPLICATE_ORDER_ERROR",
  "message": "Order already exists"
}
ПолеЗначение
statuserror — запрос завершился ошибкой. Это не платёжный статус операции.
codeКод для обработки ошибки в вашей интеграции. Учитывайте возможность неизвестного кода или отсутствия значения.
messageПояснение ошибки. Формулировка зависит от причины и настроек подключения.
field_errorsНеобязательный объект: имя поля → список сообщений. При ошибке валидации запроса сервис сообщает о первом найденном ошибочном поле.

Пример отсутствующего обязательного поля, HTTP 400:

json
{
  "status": "error",
  "code": "VALIDATION_ERROR",
  "message": "Field required",
  "field_errors": {
    "merchant_id": ["Field required"]
  }
}

HTTP-статус и результат операции

ОтветКак обработать
HTTP 400Ошибка параметров, доступа или обработки операции. Используйте code для выбора дальнейших действий.
HTTP 500 и другие 5xxОшибка сервиса. Операция могла быть создана: уточните её статус перед повторной отправкой.
HTTP 200 с status: "error"В отдельных методах ошибка возвращается в теле успешного HTTP-ответа. Одного response.ok недостаточно.
Нет ответа или истекло время ожиданияРезультат запроса неизвестен. Проверьте статус операции или дождитесь webhook.

HTTP-статус и код ошибки не заменяют статус Invoice, Refund или Withdrawal. При неопределённом результате проверяйте существующую операцию через соответствующий метод статуса или webhook. Не создавайте новую операцию с новым order, пока не выяснен результат предыдущей. При ошибке дублирования сначала найдите уже созданную операцию.

Единый каталог ошибок

Ниже — 63 кода общего каталога. Описания взяты из кода сервиса; фактический message может содержать уточнение. Все записи текущего каталога имеют базовый HTTP-статус 400, но фактический HTTP-ответ зависит от метода и обработчика, как описано выше. Доступные коды зависят от подключения; не каждый код встречается у каждого метода.

В сообщениях MID означает мерчанта, WL — список разрешённых IP-адресов, BIN — первые цифры карты, определяющие банк-эмитент.

Общие ошибки

КодОписание
WRONG_SIGNATURE_ERRORНеверная подпись запроса
VALIDATION_ERRORОшибка входных параметров/валидации
IP_DENIED_ERRORIP не разрешен (при включенном WL)
NOT_ALLOWEDОперация запрещена настройками MID
INVALID_AMOUNTСумма транзакции недействительна или вне допустимого диапазона.
INVALID_CURRENCYУказанная валюта не поддерживается для этой транзакции.
AMOUNT_BELOW_ZEROСумма выплаты меньше 0
WITHDRAWAL_DENIED_ERRORВыплаты для merchant/endpoint запрещены
DUPLICATE_ORDER_ERRORДубликат заказа
ROUTE_ERRORНе удалось подобрать терминал/реквизит
BIN_BLOCKEDКарта заблокирована по BIN/issuer
PAYMENT_SYSTEM_ERRORОшибка на стороне платежной системы. Проверьте статус транзакции.
PROVIDER_ERRORПровайдер не завершил операцию. Проверьте статус транзакции.
LIMIT_EXCEEDEDПревышен лимит
BALANCE_ERRORНедостаточно баланса для операции
NOT_EXISTSСущность не найдена
ENDPOINT_NOT_PROVIDEDНе передан endpoint/product
COMMON_ERRORОшибка при проведении оплаты.

Ошибки карт

КодОписание
CARD_EXPIREDСрок действия карты истёк.
INSUFFICIENT_FUNDSНедостаточно средств для завершения транзакции.
CARD_ERRORНевалидные данные карты
CVV_ERRORНеверный CVV/CVC
CARD_LIMIT_ERRORПревышен лимит карты
ISSUER_ERRORБанк-эмитент отклонил операцию
OPERATION_ERRORОперация не поддерживается картой
AUTHENTICATION_ERRORНе пройдена 3DS-аутентификация
THREEDS_ERRORОшибка / недоступность 3DS
UNSUPPORTED_ERRORКарта не поддерживается

Другие ошибки платежей и выплат

КодОписание
INVALID_REQUESTЗапрос содержит отсутствующие или некорректные данные.
INVALID_PAYMENT_DETAILSПлатёжные или реквизитные данные недействительны.
INVALID_COUNTRYТранзакция не поддерживается для указанной страны.
METHOD_UNSUPPORTEDВыбранный способ оплаты не поддерживается для этой транзакции.
AF_DECLINEDТранзакция отклонена проверками безопасности.
OTP_CODE_INVALIDКод подтверждения недействителен или истёк.
RATELIMIT_ERRORПревышен лимит частоты запросов или лимит транзакций.
CANCELLEDТранзакция отменена.
TRANSACTION_EXPIREDВремя на завершение транзакции истекло.
DUPLICATE_TRANSACTIONОбнаружена дублирующая транзакция. Проверьте статус существующей транзакции.
TRANSACTION_NOT_FOUNDТранзакция по указанному идентификатору не найдена.
PAYMENT_INSTRUMENT_RESTRICTEDВыбранная карта или счёт не могут быть использованы для этой транзакции.
PAYMENT_METHOD_NOT_SUPPORTEDВыбранный способ оплаты не поддерживается для этой транзакции.
CURRENCY_NOT_SUPPORTEDУказанная валюта не поддерживается для этой транзакции.
COUNTRY_NOT_SUPPORTEDТранзакция не поддерживается для указанной страны.
VERIFICATION_FAILEDНеобходимые проверки верификации не пройдены.
MERCHANT_BALANCE_INSUFFICIENTНедостаточный баланс мерчанта для завершения выплаты.
PAYMENT_DECLINEDТранзакция отклонена.
TRANSACTION_NOT_PERMITTEDЗапрошенная транзакция не разрешена.
RISK_DECLINEDТранзакция отклонена проверками безопасности.
COMPLIANCE_RESTRICTIONТранзакция не может быть обработана из-за ограничений комплаенса.
AUTHENTICATION_FAILEDАутентификация клиента не была успешно завершена.
AUTHENTICATION_TIMEOUTВремя на аутентификацию клиента истекло.
VERIFICATION_CODE_INVALIDКод подтверждения недействителен или истёк.
AUTHENTICATION_ATTEMPTS_EXCEEDEDПревышено допустимое число попыток аутентификации.
NO_AVAILABLE_ROUTEНет доступного маршрута обработки для этой транзакции.
PAYMENT_DETAILS_UNAVAILABLEПлатёжные реквизиты не могут быть предоставлены для этой транзакции.
SERVICE_UNAVAILABLEНеобходимый сервис обработки временно недоступен.
INTEGRATION_ERRORОшибка интеграции платёжной системы. Обратитесь в поддержку.
PROCESSING_ERRORОшибка при обработке запроса. Проверьте статус транзакции.
PROCESSING_TIMEOUTТаймаут обработки запроса. Проверьте статус транзакции.
TRANSACTION_CANCELLEDТранзакция отменена.
INVALID_TRANSACTION_STATEЗапрошенное действие недопустимо в текущем состоянии транзакции.
TRANSACTION_RESULT_UNKNOWNРезультат транзакции ещё не подтверждён. Не повторяйте запрос; проверьте статус.
UNKNOWN_ERRORПричина ошибки не определена. Проверьте статус транзакции.

Ошибки с неопределённым результатом

В каталоге как неокончательные отмечены PAYMENT_SYSTEM_ERROR, PROVIDER_ERROR, COMMON_ERROR, PAYMENT_DETAILS_UNAVAILABLE, SERVICE_UNAVAILABLE, INTEGRATION_ERROR, PROCESSING_ERROR, PROCESSING_TIMEOUT, INVALID_TRANSACTION_STATE, TRANSACTION_RESULT_UNKNOWN, UNKNOWN_ERROR и THREEDS_ERROR.

Для них сначала уточните статус существующей операции. Такая ошибка не является разрешением автоматически повторить платёж или выплату. Признак is_final — характеристика каталога, он не передаётся в JSON ошибки. Остальные коды также не заменяют платёжный статус операции.

Дополнительные коды API

В отдельных методах также встречаются коды ниже. Обычно они возвращаются с HTTP 400. Для DUPLICATE_ORDER действия с двухэтапной выплатой могут вернуть HTTP 200 с status: "error".

КодОписание
TEMPORARY_ERRORВременная ошибка соединения при обработке запроса. Проверьте статус операции перед повтором.
DUPLICATE_ORDERЗаказ с таким номером уже существует. Этот код встречается при работе с выплатами; учитывайте также DUPLICATE_ORDER_ERROR из общего каталога.
REFUND_AMOUNT_EXCEEDSСумма возврата превышает сумму платежа.
REFUND_INCOMPLETE_INVOICEВозврат невозможен для незавершённого платежа.
TARGET_REQUISITE_UNSUPPORTEDВыбранный канал не поддерживает передачу target_requisite_id. Это не означает, что реквизит не найден.
CUSTOMER_INVOICE_RATE_LIMITПревышен лимит запросов для клиента. Код может возвращаться при выборе маршрута платежа.

Если получен незнакомый код, сохраните идентификатор операции, HTTP-статус и ответ API для диагностики. Не считайте неизвестную ошибку успешным выполнением операции; при неопределённом результате уточните её статус.