Skip to main content
Poner en vivo es un cambio de configuración, no una reescritura. Tus queries, mutations y flujos son idénticos en ambos entornos. Lo que cambia es a qué hosts llamas y con qué credenciales los llamas — y esos cambian por completo.
Nada se traslada desde staging. Las aplicaciones, claves de API, client secrets, URIs de redirección y suscripciones de webhook existen por separado en cada entorno. Una credencial de staging nunca funcionará contra un host de producción y viceversa. Eso es deliberado: es lo que hace imposible mover dinero real accidentalmente desde un entorno de pruebas.

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á en https://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 en https://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 un jti ú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 apiKey incluido en el snippet es específico del entorno.
  • Firma los patTokens con tu apiSecret de 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 Origin coincida 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

  • 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
  • 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
  • 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
  • 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.