Публичный API
Проверка интеграции
Приёмочный сценарий перед production.
Обновлено 20 августа 2026Подготовка
Используйте отдельного тестового API-клиента и sandbox платёжного провайдера. В журнале теста сохраняйте external_id, MenuLab order ID, event_id, refund_request_id, HTTP-коды и request ID.
Обязательный сценарий
- Создайте онлайн-заказ на 45 RUB с уникальными
external_idиX-Idempotency-Key. - Повторите создание с тем же ключом и телом. Убедитесь, что второго заказа нет.
- Подтвердите оплату через
mark-paid, указав тестовыеpayment_idиpayment_provider. - Получите
order.paidи проверьте подпись webhook. - Отмените заказ через
POST /orders/{id}/cancel. - Проверьте
status=cancelled, отсутствие бонусного начисления и возврат вawaiting_external. - Повторите cancel с тем же ключом. Второй запрос возврата не должен появиться.
- Выполните sandbox-возврат и подтвердите
succeeded. - Повторите confirm с тем же ключом и телом.
- Получите
payment.refund.succeededи проверьтеpayment_status=refunded.
Для успешно завершённого заказа дополнительно получите order.completed и проверьте data.loyalty.bonus_earned, bonus_spent, bonus_balance, а также их целочисленные варианты *_cents. Убедитесь, что локальное применение одного event_id выполняется только один раз.
Отмена оператором
Создайте второй оплаченный заказ и отмените его в POS MenuLab. Интеграция должна получить payment.refund.requested без вызова /cancel, выполнить тот же процесс возврата и подтвердить результат.
Создайте также заказы с оплатой наличными и терминалом. Оформите возврат в POS и
проверьте payment_owner=menulab_pos, action_required=false, отсутствие требования
external_payment_id, одинаковый refund_request_id в requested/succeeded и
изменение payment_status в order.updated. Внешний эквайер для этих событий не вызывайте.
Сбойные сценарии
- временно верните webhook HTTP
500, затем убедитесь в повторной доставке; - доставьте одинаковый
event_idдважды и убедитесь в одном бизнес-действии; - смоделируйте HTTP
429и проверьте ожиданиеRetry-After; - оборвите соединение после изменяющего запроса и повторите его с тем же ключом;
- смоделируйте таймаут эквайера и убедитесь, что второй возврат не создаётся;
- передайте неверную сумму при confirm и обработайте
REFUND_AMOUNT_MISMATCH.
Критерии готовности
Интеграция готова к production, если оба источника отмены дают один возврат, повторные события и запросы не дублируют операции, лимиты соблюдаются, а каждый незавершённый процесс можно восстановить по сохранённым идентификаторам.