Payment Link vs. Pagos Alternativos — ¿qué flujo debo usar?
Migo expone dos integraciones de backend que se traslapan en alcance pero producen responsabilidades de renderizado distintas y atienden necesidades de UX diferentes. Ambas se autentican con el mismo merchant token de larga vida; la diferencia está en qué tiene que renderizar el comercio y dónde interactúa el cliente con el riel.
Árbol de decisión (empieza aquí)
-
¿Quieres que Migo aloje todo el UI de checkout por ti?
- Sí → usa Payment Link (
POST /transactions). Tú entregas una URL; Migo renderiza el webview completo, incluido el selector de rieles (akisiQR, BAM, Zigi, tarjetas, …). Sin código de frontend de tu lado. - No, quiero renderizar los rieles dentro de mi propio UI → usa Pagos Alternativos (
POST /api/v1/integrations/transactions[…]). Migo retorna payloads específicos por riel (URL, string de QR, imagen base64, botón push); tu frontend decide cómo mostrarlos.
- Sí → usa Payment Link (
-
¿Tienes un backend que pueda guardar un secreto de 64 caracteres?
- Sí → cualquiera de los dos flujos es seguro.
- No (SPA estática, sin servidor) → usa
POST /transactions-hook. Acepta credenciales en el cuerpo con un flujo amigable a CORS desde el navegador.
-
¿Necesitas el código
referencelegible (estiloALI001189SB)?- Sí → Payment Link es el único flujo que lo retorna en la respuesta de creación.
- No → Pagos Alternativos es suficiente; aún puedes correlacionar con
customKeys.orderIdy el Merchant Generic Callback.
Lado a lado
| Aspecto | Payment Link (POST /transactions) | Pagos Alternativos (POST /api/v1/integrations/transactions[…]) |
|---|---|---|
| Qué recibes | Una URL de webview hospedado | Payloads específicos por riel (url, qr, base64, json, payButton) |
| Selector de rieles | Alojado por Migo | Tuyo — lee paymentMethods desde la respuesta de creación de la transacción |
| Formato del header | Authorization: <token> (se recomienda el token crudo) | Authorization: Bearer <token> (recomendado) |
| CORS en el endpoint de creación | Habilitado a nivel del servicio (cors: true); aun así se recomienda un backend para mantener el merchant token del lado servidor | Habilitado a nivel del servicio (cors: true); aun así se recomienda un backend para mantener el merchant token del lado servidor |
¿La respuesta incluye reference? | Sí (por ejemplo ALI001189SB) | No |
| Generación de QR para akisiQR | El cliente escanea el QR renderizado dentro del webview | Recibes data:image/png;base64,… para renderizar en tu UI |
| Reembolsos | Soportados por flujos por riel detrás de escena | Mismo soporte por riel, llamado explícitamente vía /refund y /revert |
| Fuente de verdad del resultado | Merchant Generic Callback | Merchant Generic Callback |
Ambas superficies emiten el mismo webhook final, así que tu pipeline de conciliación es el mismo sin importar cuál creó la transacción.
Payment Link y Pagos Alternativos están protegidos por el mismo authorizer personalizado, que quita un prefijo Bearer inicial antes de validar el token. Los dos formatos anteriores son convenciones recomendadas por familia — el authorizer acepta el merchant token con o sin el prefijo Bearer en ambos. Elige la convención mostrada para la familia que uses y mantente consistente.
¿Puedo combinar ambos?
Sí — y es un patrón común cuando quieres renderizar un APM en tu UI pero también tener un fallback al webview hospedado para los usuarios que no tengan instalada la app de billetera.
- Una opción: crear la transacción vía Pagos Alternativos, renderizar el payload del APM inline (por ejemplo, la imagen base64 de akisiQR) y además ofrecer "abrir checkout hospedado" emitiendo una segunda transacción vía Payment Link para el mismo
userId/amount. - Migo las trata como transacciones independientes (distintos
uidyreference). Usa tu propiocustomKeys.orderIdpara correlacionarlas. - No intentes mezclar los dos endpoints sobre el mismo
uid: una transacción tiene un solo carril de cumplimiento.
Si necesitas que el mismo uid alimente tanto un webview hospedado como un APM inline, pide a Operaciones de Migo que habilite ese escenario para tu cuenta de comercio — está soportado, pero es opt-in por cuenta.
Cuando tengas dudas
- Integración nueva, controlas un backend, quieres el camino más simple → Payment Link.
- Estás construyendo un checkout embebido, un UI de comercio con marca propia, o necesitas específicamente el base64 de akisiQR en tu propio componente → Pagos Alternativos.
- Estás migrando desde una integración legacy
apiKey/apiSecret→ conserva el login de JWT si tu runtime depende de él; de lo contrario, cámbiate al merchant token para eliminar la complejidad del refresh.
¿Qué sigue?
- Payment Link: Crear un Payment Link · Quickstart de React
- Pagos Alternativos: Visión general · Crear transacción · Procesar pago · Recetas — Guatemala
- Auth: Formato de header por endpoint