p
This commit is contained in:
@@ -92,15 +92,15 @@ func BoldWebhook(c *fiber.Ctx) error {
|
||||
log.Printf("[BOLD] Webhook: SALE_APPROVED — payment_id=%s referencia=%s email=%s monto=%d",
|
||||
paymentID, referencia, payerEmail, monto)
|
||||
|
||||
// ─── 7. Limpiar enlace de pago del contrato (para generar uno nuevo en la próxima notificación)
|
||||
// ─── 7. Marcar contrato como pagado y limpiar enlace ────────────────────
|
||||
// La referencia tiene formato "contrato-{id}"
|
||||
if referencia != "" {
|
||||
var contratoID uint
|
||||
if _, err := fmt.Sscanf(referencia, "contrato-%d", &contratoID); err == nil && contratoID > 0 {
|
||||
if err := models.LimpiarEnlacePago(contratoID); err != nil {
|
||||
log.Printf("[BOLD] Webhook: error limpiando enlace pago contrato %d: %v", contratoID, err)
|
||||
if err := models.MarcarContratoPagado(contratoID); err != nil {
|
||||
log.Printf("[BOLD] Webhook: error marcando contrato %d como pagado: %v", contratoID, err)
|
||||
} else {
|
||||
log.Printf("[BOLD] Webhook: enlace pago limpiado para contrato %d", contratoID)
|
||||
log.Printf("[BOLD] Webhook: contrato %d marcado como pagado", contratoID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
|
||||
)
|
||||
|
||||
// PagoExitosoPage renderiza la página pública de confirmación de pago.
|
||||
// Bold redirige al cliente aquí tras el pago. La URL puede incluir ?ref=contrato-{id}.
|
||||
func PagoExitosoPage(c *fiber.Ctx) error {
|
||||
ref := c.Query("ref", "")
|
||||
return c.Render("pago_exitoso", fiber.Map{"Ref": ref}, "layouts/landing")
|
||||
}
|
||||
|
||||
// PagoEstadoAPI devuelve el estado de pago de un contrato para polling desde el frontend.
|
||||
// GET /api/pago-estado?ref=contrato-{id}
|
||||
func PagoEstadoAPI(c *fiber.Ctx) error {
|
||||
ref := c.Query("ref", "")
|
||||
if ref == "" {
|
||||
return c.JSON(fiber.Map{"confirmado": false, "error": "ref requerido"})
|
||||
}
|
||||
|
||||
var contratoID uint
|
||||
if _, err := fmt.Sscanf(ref, "contrato-%d", &contratoID); err != nil || contratoID == 0 {
|
||||
return c.JSON(fiber.Map{"confirmado": false, "error": "ref inválido"})
|
||||
}
|
||||
|
||||
confirmado, fechaPago, err := models.GetEstadoPago(contratoID)
|
||||
if err != nil {
|
||||
return c.JSON(fiber.Map{"confirmado": false, "error": "contrato no encontrado"})
|
||||
}
|
||||
|
||||
resp := fiber.Map{"confirmado": confirmado}
|
||||
if confirmado && fechaPago != nil {
|
||||
resp["fecha_pago"] = fechaPago.Format("02/01/2006 15:04")
|
||||
}
|
||||
return c.JSON(resp)
|
||||
}
|
||||
Reference in New Issue
Block a user