Отличия Sandbox ↔ Production
Песочница повторяет контракт боевого сервиса — адреса методов, структуру запросов, подпись и формат ответов, — но не сам биллинг подписок. Ниже собрано всё, что ведёт себя иначе, чтобы это не выяснилось уже на боевом контуре.
| Что | Как ведёт себя песочница |
|---|---|
| Деньги и SMS | Списаний нет, SMS не отправляются — ни PIN при CreateSubscription, ни повторный при ResendPinCode |
| Состояние подписки | Хранится. SubscriptionID из CreateSubscription переиспользуется всеми остальными методами, статус меняется по ходу сценария. Повторный CreateSubscription для того же номера отклоняется с SubscriptionAlreadyCreated, как в бою |
| Отказы сервиса | Воспроизводятся зарезервированными окончаниями номера (0001…0003), неверным PIN и «картами с ошибкой» — см. «Отказы и лимиты». Пороги частоты те же, что в бою |
GetSubscriptionStatus | Отдаёт реальный статус: Pending → Active → Cancelled / ApprovingFailed, а при включённом цикле списаний — ещё Redelivering, RenewingFailed и Closed. OperatorID — всегда 22, Country — всегда ru |
| Списания | Денег никто не снимает, исход задаётся заранее: <TestInfo><ExpectedBillingResult>, период сжимается до секунд (BillingPeriodSeconds). Без этого блока списаний нет вовсе — в бою они идут по расписанию проекта. Число попыток при отказе фиксировано (3), в бою зависит от тарифа |
| Подтверждение PIN | PIN фиксированный — 1234, 3 попытки; после третьей подписка навсегда в ApprovingFailed. Случайный PIN не выдаётся: SMS мок не отправляет, и автоматический сценарий на этом бы ломался |
| Карта и СБП | CustomerType=Card отдаёт рабочий AuthorizeUrl — мок-страницу оплаты. Реквизиты не проверяются и никуда не передаются; отказ воспроизводится последними 4 цифрами карты 0001…0005. СБП и SberPay не различаются — оба ведут на один QR-экран |
| Виджет оплаты | Работает: embed. публикуется, токен берётся из AuthorizeUrl. На демо-проекте подключены СБП, Alfa Pay и SberPay; T-Pay в виджете подписок отключён, как в бою. BillingStartTimeUtc в будущем откладывает первую оплату — TrialExists=true, в виджете только СБП. Настоящих банков нет, поэтому начальный шаг не подтвердить из приложения банка — довести сценарий до success даёт кнопка симуляции внутри виджета (в бою её нет). Денег никто не снимает: после успешного шага приходит APPROVED, отдельного уведомления о первом списании нет |
| Коллбек | Уходит при фактической смене статуса: APPROVED после подтверждения (PIN или оплата), REJECTED при отказе карты, CANCELLED после CancelSubscription, плюс события цикла списаний, если он включён. Задержка первого — 15 секунд, уведомления цикла уходят в момент списания |
| Хранение | Журналы запросов и коллбеков чистятся по расписанию |
Подпись проверяется по-настоящему. HMAC-SHA256 и допустимый дрейф времени работают ровно так же, как в бою: это та часть интеграции, которую песочница проверяет всерьёз — см. «Подпись запросов». Коллбек тоже отправляется по-настоящему, с подписью и ретраем.
Перед переходом в прод: получить боевые SubscriptionProjectID и SecretKey — доступы песочницы в бою не работают; проверить обработчик на полном цикле списаний (см. «Хуки песочницы: Списания») — в бою эти события приходят по расписанию проекта и составляют основной поток уведомлений.