Тестирование

Песочница повторяет боевой контур целиком — счета, страницу оплаты, статусы, возвраты и вебхуки, — но не двигает реальные деньги. Ключи sk_test_ доступны сразу после создания проекта, до модерации.

API v1 · обновлено 2026-09-12

Тестовые ключи

Каждому проекту выдаются две пары ключей: боевая (sk_live_…) и тестовая (sk_test_…). public_id и webhook_secret общие. Режим определяется ключом, которым авторизован запрос, — эндпоинты и формат ответов идентичны, отдельного хоста для песочницы нет.

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

Откройте url из ответа — это обычная страница оплаты с жёлтой пометкой «Тестовый режим». Вместо банка на ней три кнопки, каждая переводит счёт в нужный статус и запускает соответствующий вебхук:

КнопкаСтатус счётаСобытиеКуда вернёт покупателя
Успехpaidinvoice.paidsuccessUrl
Отказfailedinvoice.failedfailUrl
Истёкexpiredinvoice.expiredfailUrl

Кнопки показываются только для счетов, созданных тестовым ключом. На боевых счетах их нет. Возврат по тестовому счёту (POST /invoices/{id}/refund) тоже работает и присылает refund.succeeded.

Вебхуки из песочницы

Уведомления уходят на тот же webhook_url проекта, с той же подписью на webhook_secret. Тестовое событие отличают два признака: заголовок X-Paydex-Test: 1 и поле "isTest": true в объекте счёта. По любому из них ваш код отделяет тест от боевых событий — например, не выдаёт реальный товар.

Для локальной разработки нужен публичный HTTPS-адрес: пробросьте порт через ngrok, cloudflared или аналог и укажите выданный адрес в настройках проекта. История доставок и ответы вашего сервера — в карточке платежа в кабинете, там же кнопка «Повторить».

Ограничения песочницы

  • Баланс не меняется: GET /balance тестовым ключом возвращает нули, выводы недоступны.
  • Тестовые счета не попадают в отчёты по обороту и не тарифицируются; комиссия в ответах считается по реальной ставке, чтобы вы видели итоговые суммы.
  • Тестовые и боевые счета хранятся раздельно: GET /invoices/{id} боевым ключом не найдёт тестовый счёт и наоборот.
  • Ограничение частоты то же — 60 запросов в секунду; polling-лимит на GET /invoices/{id} — тоже.

Что стоит прогнать

  1. Успешная оплата — заказ помечается оплаченным по вебхуку, а не по возврату покупателя.
  2. Повтор вебхука — нажмите «Повторить» в кабинете: второй invoice.paid с тем же X-Paydex-Delivery-Id не должен выдать товар ещё раз.
  3. Отказ и истечение — покупателю предлагается оплатить заново (новый счёт с новым orderId).
  4. Неверная подпись — отправьте себе запрос с испорченным X-Paydex-Signature: обработчик отвечает 401 и ничего не меняет.
  5. Возврат — после refund.succeeded заказ отменяется, доступ отзывается.
  6. Идемпотентность создания — повторный POST /invoices с тем же orderId возвращает тот же id.

Переход в боевой режим

  • Проект одобрен модерацией (см. требования к сайту).
  • Ключ заменён на sk_live_; код не менялся.
  • Ключи хранятся в переменных окружения; в репозитории их нет.
  • Один реальный платёж на минимальную сумму прошёл и обработан.