GH GambleHub

Sandbox y entornos de prueba

TL; DR

Caja de arena confiable = aislamiento total, datos sintéticos/impersonales, simuladores realistas de sistemas externos, asientos predecibles y tiempo de viaje, idempotencia incorporada y webhooks, límites transparentes y métricas. Prod - inalcanzable, llaves - girar, promoción - sólo por las listas de cheques.


1) Mapa de los entornos y sus funciones

EntornoObjetivoAccesoDatosSeguridad
Local/DevDesarrollo rápidoIngenierosSintética/fixturas mínimasBaja
CI/TestUnit/pruebas de integración/contrataciónCI/CDavtosidyMedia
Stage/Pre-prodMontaje final, retrocesoLimitadoApretones anónimosAlto
Public SandboxSocios externos/comerciantesGate + límitesSólo sintéticaMedia
ProdDe combateSSO/acceso estrictoRealMáximo

Regla: sandbox ≠ prod. Cualquier comunicación es a través de simuladores unidireccionales sin acceso a medios reales/juegos/datos personales.


2) Datos: sintética, anonimización, sentado

Sintética predeterminada. Generadores de datos de pasaportes/tarjetas, PAN válido pero no financiero (BIN de prueba), patrones de apuestas y balances «vivos».
Anonimización para stage: tokenización de ID, privacidad diferencial para agregados, eliminación de combinaciones raras.
Sids y determinismo: un comando es un estado.

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

Time-travel: la «hora» global del entorno para las pruebas de deadline/expiración.


3) Simuladores y tapones (stubs)

Pagos/bancos/PSP

Auth/Capture/Refund/Payout со сценариями: `approved`, `declined_insufficient`, `3ds_required`, `timeout`, `duplicate`.
Webhooks PSP: firmados por HMAC, retraídas, retrasos e «internet sucio».

KYC/AML/Sanctions

Ответы: `clear`, `pep_match`, `sanction_hit`, `doc_mismatch`, `manual_review`.
Soporte de idempotencia y rate limits como en prod.

Proveedores de juegos/directorio

Lobby, fiches, RTP/rondas - generación pseudoespacial, «pagos/fallos» gestionados para casos UX.

Opción: interruptor de «rigor» del simulador (happy-path vs chaos).


4) Webhooks en la caja de arena

Firmas HMAC (v1), titulares 'X-Event-Id', 'X-Timestamp', ventana ≤ 5 minutos.
Retrés con retroceso exponencial, DLQ y replay.
Consola de «reajuste» y registros de intentos.

Pseudo:
pseudo
POST /psp/webhooks
Headers: X-Signature, X-Timestamp, X-Event-Id
Body: { event_id, type, data, attempt }

5) Idempotencia y determinismo

Todas las mutaciones toman 'Idempotency-Key'.
Los simuladores almacenan el resultado por clave (TTL 24-72 h).
«Seed-determinismo»: con la misma entrada, el mismo resultado (para pruebas repetibles).


6) Seguridad y acceso

Aislamiento de redes/VPC, secretos individuales y dominios ('sandbox. example. com`).
RBAC/ABAC: los roles de «partner», «qa», «dev», los scops de tokens son mínimos.
Ratios-límites y cuotas: cuota justa per-tenant/clave, comprensible '429 '/' Retry-After'.
Secretos sólo en KMS/Vault; rotación regular.
Prohibición de pagos reales a nivel de código/confiscación (feature-flag hard block).


7) API Gateway y observabilidad en sandbox

Las mismas políticas: OAuth2/OIDC/JWT, CORS, WAF, perfil DDoS.
Métricas: p50/p95/p99, 4xx/5xx, límites de puntuación, latency webhooks, éxitos idempotentes.
Registros/trayectos: sin PII; Corellation 'trace _ id'.
Dashboard «Sandbox Health»: aptime, colas de webhooks, errores de simuladores.


8) Banderas de fichas, versiones y compatibilidad

Incluir el fich en sandbox → stage → prod.
SemVer para la API; banner Deprecation/Sunset en Swagger/Redoc sandbox.
Persisted queries para escaparates GraphQL (si los hay).


9) CI/CD и promotion

1. Build/Unit →

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

3. Integración contra simuladores →

4. Retroceso en el escenario (anon. snapshots) →

5. Canary в prod.

Gate-check-list promotion: abajo en § 12.


10) Escenarios UAT para socios (en sandbox)

Pagos: auth/capture/refund/payout con webhooks y errores PSP.
KYC/AML: todos los estados + escalada manual.
Idempotencia: repetición de 'Idempotency-Key' → el mismo resultado.
Rate-limit: procesamiento correcto '429'.
Ventanas temporales: expiración de tokens, 'Retry-After', casos de viaje en tiempo.
Webhooks: firmas/retraídas/DLQ, replay manual y dedoup.


11) Política de datos y privacidad

Nunca almacene docks de PAN/KYC reales en sandbox/stage.
Anonimización: enmascaramiento, eliminación de identificadores directos, correlación sintética.
TTL de almacenamiento de registros y cuerpos webhooks ≤ reglamentario.


12) Hojas de cheques

12. 1 Lanzamiento de una nueva caja de arena

  • Red/base/caché/almacenamiento de objetos aislados
  • Secretos creados en KMS/Vault, acceso por roles
  • Los simuladores de PSP/KYC/juegos son zaploens y versionados
  • Swagger/Redoc + Postman colección (sandbox endpoints)
  • Webhooks: HMAC, retry, DLQ, consola replay
  • Rate/Quota perfiles, banners de Deprecation/Sunset (si los hay)
  • Dashboards y alertas (latency, 5xx, 429, DLQ)

12. 2 Promotion release (stage→prod)

  • Controles de diff contractuales (sin breaking)
  • La carga p95/p99 es normal en el escenario
  • Webhooks han pasado UAT, idempotencia aprox
  • Las banderas de la fiesta están preparadas, hay un plan de retroceso
  • Changelog, guía de migración y envío a socios

13) Antipatternas

Sandbox, «secretamente» tocando prod-services/bases.
Datos reales de tarjetas/pasaportes en stage/sandbox.
Los simuladores sin wabhooks/retrayes son un «sendero feliz» sólo.
Falta de idempotencia → duplicación de pagos/tasas.
Un secreto HMAC compartido para todos los socios.
No hay límites y 429/Retry-After transparentes.


14) Mini-snippets

.env. sandbox (ejemplo)

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

fragmento OpenAPI (servidor de sandbox)

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

Pseudocódigo de idempotencia

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

Desencadenadores del simulador PSP

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

15) Observabilidad y SLO de sandbox

Uptime sandbox API ≥ 99. 5% (el escaparate de integraciones no debe bajar).
Webhooks p95 ≤ 3 con hasta 2xx bajo carga normal.
Error budget 5xx gateway ≤ 0. 1%.
El portal Dock está disponible y sincronizado con el contrato.


16) Governance

Propietario del entorno (SRE/Plataforma) y steward API (contratos).
Proceso RFC para cambios de breaking, calendario de Deprecation/Sunset.
Límites/cuotas individuales y prising «fair-use» para la caja de arena pública.


Resumen

Sandbox es un producto para desarrolladores, no una «copia de la base». Dale: aislamiento estricto, datos sintéticos, simuladores completos con webhooks y retrés, determinismo a través de sides y time-travel, banderas de fichas y límites transparentes. Vincule todos los contratos, la observabilidad y el gobierno, y sus integraciones se volverán rápidas, seguras y predecibles, y los lanzamientos sin dolor.

Contact

Póngase en contacto

Escríbanos ante cualquier duda o necesidad de soporte.¡Siempre estamos listos para ayudarle!

Iniciar integración

El Email es obligatorio. Telegram o WhatsApp — opcionales.

Su nombre opcional
Email opcional
Asunto opcional
Mensaje opcional
Telegram opcional
@
Si indica Telegram, también le responderemos allí además del Email.
WhatsApp opcional
Formato: +código de país y número (por ejemplo, +34XXXXXXXXX).

Al hacer clic en el botón, usted acepta el tratamiento de sus datos.