GH GambleHub

Пісочниці і тестові оточення

TL; DR

Надійна пісочниця = повна ізоляція, синтетичні/знеособлені дані, реалістичні симулятори зовнішніх систем, передбачувані сиди і time-travel, вбудована ідемпотентність і вебхуки, прозорі ліміти і метрики. Прод - недосяжний, ключі - ротуються, promotion - тільки за чек-листами.


1) Карта оточень та їх ролі

ОточенняМетаДоступДаніНадійність
Local/DevШвидка розробкаІнженериСинтетика/мінімальні фікстуриНизька
CI/TestЮніт/інтеграційні/контрактні тестиCI/CDАвтосидиСередня
Stage/Pre-prodФінальна збірка, регресОбмеженаАнонімізовані снапшотиВисока
Public SandboxЗовнішні партнери/мерчантиГейт + лімітиТільки синтетикаСередня
ProdБойоваSSO/строгий доступРеальніМаксимум

Правило: sandbox ≠ prod. Будь-який зв'язок - через односторонні симулятори без доступу до реальних засобів/ігор/персональних даних.


2) Дані: синтетика, анонімізація, сидірування

Типова синтетика. Генератори паспортних/карткових даних, валідні, але нефінансові PAN (тестові BIN), «живі» патерни ставок і балансів.
Анонімізація для stage: токенізація ідентифікаторів, диференцная приватність для агрегатів, видалення рідкісних комбінацій.
Сиди і детермінізм: одна команда - один стан.

bash make db-reset && make db-seed ENV=sandbox SEED=2025_11_03

Time-travel: глобальна «година» оточення для тестів дедлайнів/експірацій.


3) Симулятори і заглушки (stubs)

Платежі/банки/PSP

Auth/Capture/Refund/Payout зі сценаріями: `approved`, `declined_insufficient`, `3ds_required`, `timeout`, `duplicate`.
Вебхуки PSP: підписані HMAC, ретраї, затримки і «брудний інтернет».

KYC/AML/Sanctions

Відповіді: `clear`, `pep_match`, `sanction_hit`, `doc_mismatch`, `manual_review`.
Підтримка ідемпотентності і rate limits як в prod.

Ігрові провайдери/каталог

Лобі, фічі, RTP/раунди - псевдовипадкова генерація, керовані «виплати/провали» для UX-кейсів.

Параметр: перемикач «строгості» симулятора (happy-path vs chaos).


4) Вебхукі в пісочниці

Підписи HMAC (v1), заголовки'X-Event-Id','X-Timestamp', вікно ≤ 5 хвилин.
Ретраї з експоненціальним backoff, DLQ і replay.
Консоль «перевідправити» і логи спроб.

Псевдо:
pseudo
POST /psp/webhooks
Headers: X-Signature, X-Timestamp, X-Event-Id
Body: { event_id, type, data, attempt }

5) Ідемпотентність і детермінізм

Всі мутації приймають'Idempotency-Key'.
Симулятори зберігають результат по ключу (TTL 24-72 год).
«Seed-детермінізм»: при одному і тому ж вході - однаковий результат (для повторюваних тестів).


6) Безпека та доступ

Ізоляція мереж/VPC, окремі секрети і домени ('sandbox. example. com`).
RBAC/ABAC: ролі «partner», «qa», «dev», скопи токенів мінімальні.
Rate-limits і квоти: справедлива частка per-tenant/ключ, зрозумілі'429 '/' Retry-After'.
Секрети тільки в KMS/Vault; Регулярна ротація.
Заборона реальних платежів на рівні коду/конфігу (feature-flag hard block).


7) API Gateway і спостережуваність в sandbox

Ті ж політики: OAuth2/OIDC/JWT, CORS, WAF, DDoS-профіль.
Метрики: p50/p95/p99, 4xx/5xx, hit-rate лімітів, latency webhooks, ідемпотентні хіти.
Логи/трейси: без PII; кореляція'trace _ id'.
Дашборд «Здоров'я пісочниці»: аптайм, черги вебхуків, помилки симуляторів.


8) Фіча-прапори, версії та сумісність

Включення фіч в sandbox → stage → prod.
SemVer для API; банер Deprecation/Sunset в Swagger/Redoc пісочниці.
Persisted queries для GraphQL-вітрин (якщо є).


9) CI/CD и promotion

1. Build/Unit →

2. Contract/Mock tests (OpenAPI/Protobuf/GraphQL SDL) →

3. Інтеграційні проти симуляторів →

4. Stage регрес (анон. снапшоти) →

5. Canary в prod.

Gate-чек-лист promotion: нижче в § 12.


10) UAT-сценарії для партнерів (у пісочниці)

Платежі: auth/capture/refund/payout з вебхуками і помилками PSP.
KYC/AML: всі статуси + ручна ескалація.
Ідемпотентність: повторний'Idempotency-Key'→ той же результат.
Rate-limit: коректна обробка «429».
Тимчасові вікна: експірація токенів,'Retry-After', time-travel кейси.
Webhooks: підписи/ретраї/DLQ, ручний replay і дедуп.


11) Політика даних і приватність

Ніколи не зберігати real PAN/KYC-доки в sandbox/stage.
Анонімізація: маскування, видалення прямих ідентифікаторів, синтетична кореляція.
TTL зберігання логів і тіл вебхуків ≤ регламентного.


12) Чек-листи

12. 1 Запуск нової пісочниці

  • Ізольована мережа/база/кеш/об'єктне сховище
  • Секрети створені в KMS/Vault, доступ за ролями
  • Симулятори PSP/KYC/ігор задеплоєні і версіоновані
  • Swagger/Redoc + Postman колекція (sandbox endpoints)
  • Вебхукі: HMAC, retry, DLQ, консоль replay
  • Rate/Quota профілі, банери Deprecation/Sunset (якщо є)
  • Дашборди та алерти (latency, 5xx, 429, DLQ)

12. 2 Promotion release (stage→prod)

  • Контрактні diff-перевірки (без breaking)
  • Навантажувальні p95/p99 в нормі на stage
  • Вебхукі пройшли UAT, ідемпотентність ок
  • Фіча-прапори підготовлені, план відкату є
  • Changelog, міграційний гід і розсилка партнерам

13) Антипатерни

Пісочниця, «таємно» зворушує prod-сервіси/бази.
Реальні карткові/паспортні дані в stage/sandbox.
Симулятори без вебхуків/ретраїв - «щаслива стежка» тільки.
Відсутність ідемпотентності → дублікати виплат/ставок.
Один загальний HMAC-секрет для всіх партнерів.
Немає лімітів і прозорих 429/Retry-After.


14) Міні-сніпети

.env. sandbox (приклад)

dotenv
API_BASE=https://sandbox.api.example.com
OAUTH_ISS=https://sandbox.idp.example.com
PSP_SIM_URL=https://sandbox.psp-sim.example.com
KYC_SIM_URL=https://sandbox.kyc-sim.example.com
WEBHOOK_SECRET_ROTATION_DAYS=90
FEATURE_FORCE_SANDBOX_PAYMENTS=1

OpenAPI фрагмент (sandbox сервер)

yaml servers:
- url: https://sandbox.api.example.com/v1 description: Public Sandbox

Псевдокод ідемпотентності

pseudo if store.exists(idem_key): return store.get(idem_key)
res = do_business()
store.set(idem_key, res, ttl=72h)
return res

Тригери симулятора PSP

json
{ "scenario": "payout", "case": "declined_insufficient", "payout_id": "p_123" }

15) Спостережуваність і SLO пісочниці

Uptime sandbox API ≥ 99. 5% (вітрина інтеграцій не повинна падати).
Webhooks p95 ≤ 3 з до 2xx при нормальному навантаженні.
Error budget 5xx шлюзу ≤ 0. 1%.
Док-портал доступний і синхронізований з контрактом.


16) Governance

Власник оточення (SRE/Platform) і стeward API (контракти).
RFC-процес для breaking-змін, календар Deprecation/Sunset.
Окремі ліміти/квоти та прайсинг «fair-use» для публічної пісочниці.


Резюме

Пісочниця - це продукт для розробників, а не «копія бази». Дайте: сувору ізоляцію, синтетичні дані, повноцінні симулятори з вебхуками і ретраями, детермінізм через сиди і time-travel, фіча-прапори і прозорі ліміти. Обв'яжіть всі контрактами, спостережуваністю і governance - і ваші інтеграції стануть швидкими, безпечними і передбачуваними, а релізи - безболісними.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.