Sandbox

Тестовая среда

Запросы на sk_test ходят в наш симулятор. Исход платежа — детерминированный, по последним двум цифрам суммы.

Все запросы по тестовому ключу sk_test_… попадают в наш симулятор, не в реальный банк. Симулятор детерминированный: исход платежа зависит от последних двух цифр суммы в копейках. Это сделано так, чтобы вы могли воспроизводить нужные сценарии в скрипте без хитрых триггеров.

Триггеры исходов для платежей

Сумма (копейки)Что произойдёт
…00succeeded мгновенно. Полезно для UI smoke-тестов.
…99failed с failure_code insufficient_funds.
…66failed с failure_code fraud_blocked.
…50requires_action: платёж в pending, payment_url ведёт на нашу страницу 3DS-эмуляции, где можно нажать «Оплатить» или «Отменить».
любая другаяpending, через ~3 секунды переходит в succeeded (имитирует обычный СБП).
> 10 000 000 ₽failed с failure_code limit_exceeded — потолок sandbox.

Триггеры исходов для выплат

Сумма (копейки)Что произойдёт
…00succeeded мгновенно.
…99failed с reason insufficient_funds_in_payout_balance.
…66failed с reason recipient_blacklisted_aml.
любая другаяpending, через ~3 секунды переходит в succeeded.

Примеры

  • amount: 100099 (1000 руб 99 коп) — проверка обработки insufficient_funds.
  • amount: 250050 (2500 руб 50 коп) — проверка 3DS-флоу.
  • amount: 500000 (5000 руб 00 коп) — быстрый success без задержки.
  • amount: 150042 (1500 руб 42 коп) — реалистичный async-флоу с pending в succeeded.

Дополнительные поля в test-ответах

В test-режиме POST /payments и POST /payouts возвращают пару дополнительных полей, чтобы вы видели запланированный исход симулятора, не дожидаясь webhook'а:

ПолеЗначение
mode"test" вместо обычного "live"
simulatorзапланированный финальный статус (succeeded / failed / requires_action / pending)
failure_codeдля failed-исходов — код отказа (insufficient_funds, fraud_blocked, …)
failure_messageчеловеко-читаемое описание для failed-исходов

В metadata платежа в test-режиме автоматически проставляются служебные ключи mode: "test", simulator_outcome и (для отказов) simulator_failure_code. По ним удобно фильтровать тестовые платежи в логах.

Webhook'и в test-режиме

Webhook-уведомления приходят на тот же endpoint, что вы настроили в ЛК (или на per-payment webhook_url). Подпись и формат идентичны production — код webhook-handler'а адаптировать под test не нужно.

Когда мерчант пройдёт KYC и платформа активирует live-режим, переключение на боевой банк — это просто замена ключа с sk_test_ на sk_live_. URL и handler'ы остаются те же.