WordPress · 6 мин чтения

Тестовый режим ЮKassa: как проверить оплату до запуска магазина

Тестовый режим ЮKassa я включаю в каждом проекте с приёмом онлайн-оплаты, будь то интернет-магазин на Tilda, сайт на WooCommerce или собственный бэкенд с интеграцией по API. Ошибка в обработке статуса платежа или в проверке подписи вебхука, которая вылезет на реальных деньгах клиента, обходится дороже, чем пара часов на тестирование до запуска. Ниже разберу, как включить тестовый режим ЮKassa, какими картами и данными гонять тестовые платежи и что проверить перед переключением магазина на боевые расчёты.

Что такое тестовый режим ЮKassa и когда он нужен

Тестовый режим ЮKassa это отдельная пара учётных данных для того же магазина: свой shop_id и свой secret_key, с которыми API работает по тем же правилам, что и в боевом режиме, но деньги никуда не списываются. Запрос уходит на тот же адрес api.yookassa.ru/v3, статусы платежей приходят такие же (pending, waiting_for_capture, succeeded, canceled), только вместо реальной карты клиента используются тестовые номера из документации ЮKassa.

На практике я прогоняю через тестовый режим каждый сценарий: успешную оплату, отказ по недостатку средств, отмену пользователем на странице оплаты, двухстадийную оплату с холдированием и возврат. Если на сайте настроен только один сценарий из пяти и в проверке участвовала лишь одна успешная оплата, при первом реальном отказе клиента магазин чаще всего просто зависает в неопределённом статусе заказа.

Как включить тестовый режим в личном кабинете ЮKassa

После регистрации магазина в личном кабинете ЮKassa наверху страницы есть переключатель между рабочим и тестовым режимом. При активации тестового режима система выдаёт отдельные shop_id и secret_key, которые не пересекаются с боевыми: их нужно подставить в код, в настройки плагина CMS или в переменные окружения тестового стенда.

Важный момент, о который спотыкаются чаще всего: тестовые и боевые ключи хранятся в разных разделах кабинета одновременно, и после запуска магазина тестовый раздел никуда не пропадает. Я обычно держу оба набора ключей в .env файле проекта под разными именами (YOOKASSA_SHOP_ID_TEST и YOOKASSA_SHOP_ID_LIVE), чтобы при доработках можно было быстро переключиться обратно в тест, не трогая боевую конфигурацию.

Параметр Тестовый режим Боевой режим
shop_id и secret_key отдельная тестовая пара отдельная боевая пара
Списание денег не происходит реальное списание
Чек по 54-ФЗ не формируется формируется и уходит в ОФД
Вебхуки работают на тестовый notification_url работают на боевой notification_url
Способы оплаты эмулируются тестовыми картами реальные карты, СБП, кошельки

Тестовые карты и данные для проверки оплаты

ЮKassa публикует набор тестовых номеров карт, каждый из которых имитирует конкретный результат оплаты. Срок действия карты можно указывать любой в будущем, CVC любой трёхзначный код, а для подтверждения 3‑D Secure используется код 12345.

  • 5555 5555 5555 4444 - успешная оплата
  • 5555 5555 5555 4477 - отказ банка по недостатку средств
  • отмена на форме оплаты - просто закрыть окно оплаты, не вводя данные

Я прогоняю по очереди все три сценария и смотрю, что происходит с заказом в CRM и на сайте: меняется ли статус заказа, приходит ли клиенту письмо или сообщение в Telegram-бот, не остаётся ли товар зарезервированным на складе после отказа. Если магазин работает по двухстадийной оплате (сначала холдирование suммы, потом списание capture), отдельно проверяю статус waiting_for_capture и то, что списание происходит только после подтверждения отгрузки.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

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

На Tilda оплата через ЮKassa подключается через встроенный блок Tilda Payments, куда достаточно вставить тестовые shop_id и secret_key, чтобы форма заказа начала уходить в тестовый режим. Стандартная форма закрывает 80% задач, но как только нужен нестандартный сценарий, например ограничить способ оплаты только картой без СБП или сделать кастомный редирект после успешной оплаты с передачей номера заказа в CRM, приходится дописывать логику отдельным скриптом в Zero Block. Для таких доработок я обычно оформляю разработку и настройку интеграции эквайринга под конкретный магазин, потому что типовые блоки конструктора такие сценарии не закрывают.

На WooCommerce всё завязано на официальном плагине ЮKassa: в его настройках есть отдельная галочка тестового режима и два поля под тестовые и боевые ключи. После включения теста делаю полный прогон чекаута с разными способами доставки и разными тестовыми картами, потому что часть плагинов некорректно обрабатывает статус waiting_for_capture и оставляет заказ в подвешенном статусе processing вместо on-hold.

Тестирование уведомлений и вебхуков ЮKassa

Платёж считается обработанным только после того, как сервер магазина получил вебхук на notification_url и ответил кодом 200. В тестовом режиме указывается отдельный адрес для уведомлений, и если сайт ещё не выложен на боевой сервер, для локальной разработки я поднимаю туннель через ngrok, чтобы ЮKassa могла достучаться до localhost.

Вот так выглядит тело вебхука о успешной оплате, которое приходит на notification_url:

{
  "type": "notification",
  "event": "payment.succeeded",
  "object": {
    "id": "22d6d597-000f-5000-9000-145f6df21d6f",
    "status": "succeeded",
    "amount": { "value": "2500.00", "currency": "RUB" },
    "metadata": { "order_id": "10452" }
  }
}

Перед тем как писать бэкенд-обработчик, я закидываю этот вебхук в n8n на отдельный тестовый workflow и смотрю, какие поля реально приходят, потому что структура metadata зависит от того, что было передано при создании платежа. Уже потом на основе этого собираю рабочую цепочку: получение вебхука, проверка статуса, обновление заказа в CRM или отправка уведомления в Telegram-бот на aiogram. Если оплата встроена прямо в бота, тестовый инвойс обязательно проверяю до того, как бот уйдёт в публичный запуск, иначе первый же реальный платёж рискует остаться без подтверждения у продавца.

Типичные ошибки при переходе из тестового режима в боевой

Перечислю то, на чём сам ловил заказчиков и себя за последние проекты.

  • Забыли заменить тестовые shop_id и secret_key на боевые в коде или в плагине, магазин выглядит рабочим, но принимает только тестовые карты.
  • Notification_url остался тестовым, вебхуки боевых платежей уходят в никуда, заказы не подтверждаются.
  • Не протестирован возврат (refund): в боевом режиме первый же спор с клиентом превращается в ручное разбирательство через поддержку банка.
  • Тестовые карты случайно остаются в документации на сайте или в письме клиенту.
  • Не проверена работа сценария при таймауте: ЮKassa ждёт ответ от сервера до 10 секунд и повторяет отправку вебхука, если обработчик не успел ответить или упал с ошибкой 500.

Перед переключением в боевой режим я прогоняю тот же список тестов, что и в самом начале, только уже на боевых данных с суммой в 1 рубль, чтобы убедиться, что деньги реально доходят на расчётный счёт и чек формируется корректно.

Интернет-магазин под ключ

Интернет-магазин

от 80 000 ₽

Подробнее →

Частые вопросы

Можно ли случайно списать реальные деньги в тестовом режиме ЮKassa

Нет, тестовый режим работает с отдельной парой ключей и эмулирует ответ банка по номеру карты, реальное движение денег между счетами не происходит, поэтому даже указав случайно настоящую карту, вы не спишете с неё средства.

Сколько действует тестовый магазин ЮKassa

Ограничения по сроку нет, тестовый раздел кабинета остаётся доступным и после того, как магазин переключили на боевые платежи, поэтому им удобно пользоваться при каждой новой доработке сайта.

Нужна ли онлайн касса для тестового режима

Нет, требования 54-ФЗ распространяются только на боевые платежи с реальным движением денег, в тестовом режиме чек не формируется и не передаётся в ОФД.

Что делать если тестовый платёж завис в статусе pending

Чаще всего дело в вебхуке: обработчик на сайте либо не отвечает кодом 200, либо превышает таймаут в 10 секунд, либо notification_url указывает не на тот адрес. Проверьте логи сервера и убедитесь, что тестовый и боевой notification_url не перепутаны местами.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Самозанятый Калинкин Н. А. · работаю с физлицами и юрлицами

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно