Skip to Content

Типовые ошибки интеграции

Симптомы, которые чаще всего приводят в поддержку, и что их вызывает.

Мок ответил 200, но в ответе пустые поля

Почти всегда — поле лежит не на своём месте. Песочница не валидирует тело запроса: неизвестные ключи она молча игнорирует, а обязательные, которых не нашла, подставляет пустыми. Запрос выглядит успешным, но данные потеряны.

ПолеГде лежит
merchant_order_idвнутри order в POST /invoices
merchant_contract_idна верхнем уровне в POST /contracts, но внутри contract в POST /invoices
InvoiceID (XML)внутри <InvoiceInfo>, а не сразу под тегом операции

Простая проверка: сравните эхо-поля ответа с тем, что отправили. Если merchant_order_id вернулся пустым — поле не доехало, и дальше по нему ничего не найдётся.

getInvoice не меняет статус

Так проявляется предыдущая ошибка в XML-контуре. Имитация задержки тарификации ищет InvoiceID в <InvoiceInfo>; если положить его сразу под <GetInvoiceRequest>, ответ будет приходить из заготовленного шаблона, и статус не сменится никогда. Правильная форма — в разделе «Статус инвойса».

Платёж создан, но деньги «не пришли»

Ответ createInvoice — это подтверждение приёма, а не результат тарификации. Исход наступает позже: в песочнице — через test_info.callback_delay_seconds (по умолчанию 10 секунд), в XML-контуре getInvoice переключается на Processed / PAID через 6 секунд после первого запроса статуса. Ориентируйтесь на status и payment_status, а не на факт успешного создания.

Ошибка подписи

ПричинаКак проверить
Локальное время вместо UTCСамая частая. Метка времени всегда UTC, даже если сервер живёт в другом поясе
Формат метки перепутан между протоколамиXML — yyyyMMddHHmmss, JSON — ISO-8601. Подпись считается по той строке, которую вы реально отправляете
Подписан один timestamp, отправлен другойНе вызывайте «получить текущее время» дважды: посчитайте один раз и используйте и в подписи, и в запросе
base64 вместо hexОбе HMAC-операции дают hex в нижнем регистре
Перепутан порядок конкатенацииlogin + inner, не наоборот. Сверьтесь с пошаговым примером в «Подписи запросов»
Часы сервера ушлиДопуск ±20 минут; при большем дрейфе приходит AUTH_INVALID_TIMESTAMP

Коллбек не приходит

Проверяйте по порядку: настроен ли callback URL у проекта (в песочнице его задают администраторы); прошла ли задержка первой отправки; отвечает ли ваш обработчик 2xx — всё остальное считается неуспехом, включая редирект, который песочница не выполняет; не закрыт ли ваш адрес фаерволом со стороны песочницы. Помните, что в XML-контуре приходит только уведомление о платеже — возврата и событий контракта там нет вовсе.