Mapa de endpoints
El host de GraphQL y el host de OAuth son servicios distintos con dominios diferentes. Cambiar uno y no el otro es el error de corte más común — y falla de forma confusa, porque la autorización tiene éxito y luego cada llamada al API es rechazada.
Cómo acceder a cada portal
El portal live está enhttps://fluz.app/for-developers. Desde allí, la pestaña de desarrollador tiene un enlace ‘Open Staging’ hacia el portal de staging — tus credenciales de inicio de sesión son las mismas en ambos. Cada portal muestra solo las aplicaciones y claves de API de ese entorno.
Haz del entorno una variable
Si algún host, clave o URI de redirección es un string literal en tu base de código, corrígelo antes del corte. Todo lo específico del entorno pertenece a la configuración.Usa staging como valor predeterminado, nunca producción. Si un despliegue pierde su variable de entorno, quieres que apunte al entorno de pruebas, no que mueva dinero real.
Reconstruye tu app en el portal live
Vuelve a realizar Create an OAuth App y Configure OAuth App enhttps://fluz.app/for-developers. Luego verifica cada uno de estos — cada uno es algo que la gente suele olvidar:
1
Reemite cada credencial
client_id, client_secret, apiKey y apiSecret de producción son todos valores nuevos. Ponlos en tu almacén de secretos de producción. Confirma que ningún valor de staging sobrevive en una configuración de producción.2
Vuelve a registrar URIs de redirección en hosts de producción
Tu URL de callback de producción, en su forma canónica exacta. Luego elimina cualquier
localhost o URIs de staging — una app de producción no debe aceptar una redirección a la laptop de un desarrollador.3
Redirige URLs de webhook
A endpoints de producción que sean públicamente accesibles, monitoreados y con alertas. Rehaz las suscripciones por evento; no se copian entre entornos. Si usaste una URL catch-all en staging, decide si realmente quieres eso en producción.
4
Configura Origin a tu dominio de producción
Para widgets embebidos, esto debe coincidir con el dominio que realmente sirve la página, o el widget no cargará.
5
Vuelve a seleccionar tus scopes
Las selecciones de scopes no se transfieren. Recorre las llamadas al API de tu integración y confirma que el scope de cada una esté marcado en la pestaña Permissions de la app de producción. Un scope faltante se omite silenciosamente, no se rechaza.
6
Completa la pestaña Overview
Nombre, subtítulo, descripción, avatar y logomark son lo que usuarios reales ahora ven en una pantalla de consentimiento real decidiendo si darte acceso a su dinero. El texto placeholder llega a producción si lo permites.
7
Confirma el estado de tu app
Las aplicaciones tienen un estado en el dashboard — una app en revisión aún no es una app que tus clientes puedan usar. Confirma que tu app de producción esté activa antes de anunciar nada.
Qué se comporta diferente en producción
Staging refleja las capacidades y flujos de transacción de producción sin dinero real. Eso cubre la mayor parte de la superficie, pero no toda.
Tres consecuencias que vale la pena planificar:
- La idempotencia deja de ser opcional. Cada llamada que mueve dinero necesita un
idempotencyKeyúnico, y los tokens de widget necesitan unjtiúnico. En staging un duplicado es una molestia; en producción es un pago doble. Ver Idempotency. - Tu manejo de errores se pone a prueba. Los usuarios de prueba no son rechazados por fondos insuficientes ni fallan KYC de formas que no guionaste. Cada ruta de falla necesita un resultado definido de cara al usuario antes del lanzamiento, no después.
- La conciliación importa. Verifica saldos en ambos lados de una transferencia en lugar de asumir éxito por una respuesta 200.
Higiene de datos, en ambas direcciones
Nunca pongas datos de producción en staging. Ni detalles reales de clientes, ni información financiera real, ni PII. Staging es para datos creados explícitamente para pruebas. La inversa también aplica: no lleves usuarios de prueba, fuentes de fondos de prueba o payloads de webhook de prueba a producción. Los artefactos de prueba en un libro mayor live son difíciles de desentrañar después, y algunos no pueden eliminarse.Corte de widgets
Si estás publicando un widget embebido, aplican las mismas reglas más estas:- Regenera el código de inserción desde la pestaña Installation de la app de producción. El
apiKeyincluido en el snippet es específico del entorno. - Firma los
patTokens con tuapiSecretde producción, del lado del servidor. Confirma que el secret se cargue desde tu almacén de secretos de producción y que el generador de tokens no siga apuntando a un valor de staging. - Confirma
Origincoincida exactamente con tu dominio de producción. - Vuelve a verificar el tipo de transacción. Pay-In y Payout mueven dinero en direcciones opuestas; verifica la dirección contra una transferencia real antes de abrirlo a usuarios.
Lista de verificación previa al lanzamiento
Configuración
Configuración
- App de producción creada, configurada y activa
- Las cuatro credenciales reemitidas y almacenadas en el almacén de secretos de producción
- No quedan URIs de redirección de staging o localhost en la app de producción
- URLs de webhook apuntan a endpoints de producción, con suscripciones de eventos vueltas a seleccionar
- Scopes vueltos a seleccionar y alineados con tus llamadas reales al API
- Pestaña Overview completa: nombre, subtítulo, descripción, avatar, logomark
Código
Código
- No hay hosts, claves o URIs de redirección hard-coded en la base de código
- La resolución de entorno predetermina a staging
- Se cambiaron tanto el host de OAuth como el host de GraphQL
- Claves de idempotencia generadas por operación, no por sesión
- La ruta de callback es idempotente y valida
state - La renovación de token corre antes del vencimiento en lugar de reaccionar a una falla
Operaciones
Operaciones
- Endpoint de webhook monitoreado, con alertas ante fallas de entrega o procesamiento
- El logging captura identificadores de solicitud y claves de idempotencia, y nunca captura secretos, PANs ni PII
- Hay responsables de los runbooks de “el usuario no puede conectar” y “transferencia atascada”
- Ejecutaste una transacción real end-to-end al monto más pequeño posible, en ambas direcciones, y reconciliaste ambos libros mayores
Despliegue
Despliegue
- Usuarios internos primero, luego una cohorte pequeña, luego disponibilidad general
- Puedes deshabilitar la integración sin desplegar código: un feature flag, no un rollback
- Ruta de reautorización construida y probada, para cuando expiren los refresh tokens o los usuarios revoquen
Fallas comunes en el corte
Próximos pasos
Configurar app OAuth
Vuelve a ejecutar cada pestaña en tu app de producción.
Flujo de otorgamiento
Verifica la pantalla de consentimiento en hosts de producción.
Refrescar un access token
Mantén vivas las conexiones de producción sin volver a pedir permiso.
Funciones del API
Todo ahora corriendo contra dinero real.