M MenuLabБаза знаний Поддержка

Публичный API

Проверка интеграции

Приёмочный сценарий перед production.

Обновлено 20 августа 2026

Подготовка

Используйте отдельного тестового API-клиента и sandbox платёжного провайдера. В журнале теста сохраняйте external_id, MenuLab order ID, event_id, refund_request_id, HTTP-коды и request ID.

Обязательный сценарий

  1. Создайте онлайн-заказ на 45 RUB с уникальными external_id и X-Idempotency-Key.
  2. Повторите создание с тем же ключом и телом. Убедитесь, что второго заказа нет.
  3. Подтвердите оплату через mark-paid, указав тестовые payment_id и payment_provider.
  4. Получите order.paid и проверьте подпись webhook.
  5. Отмените заказ через POST /orders/{id}/cancel.
  6. Проверьте status=cancelled, отсутствие бонусного начисления и возврат в awaiting_external.
  7. Повторите cancel с тем же ключом. Второй запрос возврата не должен появиться.
  8. Выполните sandbox-возврат и подтвердите succeeded.
  9. Повторите confirm с тем же ключом и телом.
  10. Получите 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, если оба источника отмены дают один возврат, повторные события и запросы не дублируют операции, лимиты соблюдаются, а каждый незавершённый процесс можно восстановить по сохранённым идентификаторам.