Agrega API de pagos externos: tokens por servicio, atados a pasarela e IP

Permite emitir credenciales (token hasheado + IP/CIDR opcional) desde
/app/pagos-externos para que aplicaciones de terceros pidan cobros a
través de Bold/dLocal/PayPal sin acceso a nada más del sistema:

- POST /api/v1/pagos-externos/solicitar genera el link de cobro real
  usando solo las pasarelas habilitadas para ese servicio.
- Los webhooks existentes de Bold/dLocal/PayPal (firma obligatoria,
  idempotentes) ahora también resuelven referencias "extpay-…" sin
  tocar el flujo de contratos ("contrato-{id}").
- Al confirmarse el pago se notifica por webhook firmado (HMAC) y/o
  Telegram, configurable por servicio.
- CRUD de servicios protegido con SoloAdmin; token y callback_secret
  solo se muestran una vez, en DB se guardan hasheados.
This commit is contained in:
Lizandro GD
2026-08-04 14:16:13 +00:00
parent 3e2e4b63e9
commit e5849549a0
15 changed files with 1424 additions and 5 deletions
+9
View File
@@ -3,6 +3,7 @@ package routes
import (
"github.com/gofiber/fiber/v2"
apiControllers "github.com/sujit-baniya/fiber-boilerplate/rest/controllers/api"
"github.com/sujit-baniya/fiber-boilerplate/rest/middlewares"
)
func ApiRoutes(api fiber.Router) {
@@ -24,6 +25,14 @@ func v1AuthRoutes(api fiber.Router) {
api.Post("/rapyd/wallet/create", apiControllers.MakeWallet)
api.Post("/generate-url-qr", apiControllers.CreateUrlQr)
api.Post("/ia/ollama-generate", apiControllers.GeneraTextoStream)
// ─── Pagos externos: API pública para apps de terceros ────────────────────
// Autenticación propia (token Bearer + IP), independiente de la sesión/JWT
// interna — por eso está excluida en AuthApi() (rest/middlewares/auth.go).
pagosExt := api.Group("/pagos-externos", middlewares.AuthServicioPago)
pagosExt.Get("/pasarelas", apiControllers.PasarelasDisponiblesHandler)
pagosExt.Post("/solicitar", apiControllers.SolicitarPagoExternoHandler)
pagosExt.Get("/:referencia/estado", apiControllers.EstadoPagoExternoHandler)
}
func v1Routes(api fiber.Router) {