Poner un botón de “Pagar con Yappy” es la parte visible. Lo que evita dolores de cabeza es lo invisible: el monto se calcula en el servidor, el pedido tiene estados claros, y el sistema sabe qué hacer si el cliente cierra la app a mitad del pago.
Esta guía describe un patrón backend-first con Laravel. Si tu vitrina es WordPress o WooCommerce, el CMS se queda como escaparate; la lógica sensible vive fuera del tema. El mismo enfoque sirve para Yappy (Banco General), BAC Credomatic, Paguelo Fácil y pasarelas unificadas.
Por qué importa en Panamá
Yappy es una forma de cobro muy usada. Un flujo mal diseñado no solo “falla en staging”: genera ventas fantasmas, cobros sin pedido, o pedidos pagados que nadie puede probar ante soporte o contabilidad.
- Confianza: el cliente necesita saber si pagó o no, sin ambigüedad.
- Operación: el equipo debe reconciliar banco vs pedidos sin Excel eterno.
- Seguridad: si el navegador decide el precio, alguien lo manipula.
- Escalabilidad: mañana quieres BAC o Paguelo Fácil sin reescribir la tienda.
Qué es Yappy en la práctica
Piensa en Yappy como una “ventanilla digital”: tu servidor pide una intención de cobro, el cliente completa el pago en la app o redirect, y tu sistema recibe la confirmación por un canal confiable (no solo por la URL de retorno).
- Alta del comercio y credenciales (
merchantId/ secret) en el portal comercial. - El servidor genera URL o intención de pago con el monto correcto.
- El usuario completa el pago en el flujo de Yappy (app / redirect).
- Redirect + notificación al endpoint actualizan la orden con validación de firma.
Regla de oro: el pago nace en el backend
Antes de mostrar el botón, el servidor debe hacer el trabajo pesado:
- Crear o recuperar la orden con ítems, moneda e impuestos.
- Calcular el total en servidor (nunca confiar en el JSON del navegador).
- Guardar un registro de pago en estado
pendingconorder_idinterno. - Pedir a Yappy la URL / token con esas cifras.
- Devolver al front solo lo necesario para continuar (redirect o datos mínimos).
WordPress / WooCommerce sin ensuciar el tema
En sitios con Elementor, temas a medida o WooCommerce, los secretos no deben vivir en functions.php ni en snippets del page builder. Es como dejar la llave de la caja fuerte pegada en la vitrina.
- WooCommerce crea el pedido local.
- Un endpoint o plugin delgado llama a la API Laravel (pasarela).
- Laravel habla con Yappy / BAC / Paguelo Fácil.
- WordPress refleja el estado cuando el backend confirma.
Implementación en Laravel (pasos)
- Modelos
Order+Paymentcon estados normalizados. - Servicio
PaymentGatewaycon adapters detrás de una interfaz. - Endpoint protegido para iniciar pago: valida carrito, calcula total, persiste
pending. - Endpoint de callback/IPN: verifica firma, es idempotente, despacha job de conciliación.
- Página de retorno que consulta el estado en DB; no marca
paidpor query string. - Cola para reintentos cuando el banco notifica tarde.
- Secrets solo en env del host (Coolify: variables del servicio, no
.enven Git).
Estados normalizados
| Estado interno | Significado |
|---|---|
pending | Intención creada; aún sin confirmación confiable |
paid | Cobro confirmado por callback / validación de firma |
rejected | Rechazado por el proveedor |
cancelled | El usuario abortó |
expired | Timeout operativo |
Errores frecuentes en producción
- Confirmar venta solo porque el usuario llegó a
/pago-exitoso. - Dejar el secret en un plugin de WordPress versionado en Git.
- Mezclar lógica de Yappy, BAC y Paguelo Fácil en un solo
ifgigante. - Olvidar el caso “usuario pagó y cerró la app” sin callback visible.
- Deploy con tag
latesty secretos horneados en la imagen Docker. - No persistir el payload del proveedor: imposible auditar después.
Checklist técnico
- Credenciales solo en variables de entorno.
- Sandbox y producción separados.
- Idempotencia: el mismo
order_idno crea dos cobros. - Persistir payload para auditoría.
- Validar lo que el proveedor envía de vuelta (firma / campos).
- Jobs para reintentos de conciliación.
- Logs sin secretos ni datos de tarjeta.
- Página de resultado que consulta el backend.
- Healthcheck y workers vivos en el deploy.
- Runbook de rotación de secrets y reprocesamiento de IPN.
La integración conecta con Docker, CI/CD y Coolify, auditoría de seguridad y pagos en línea .