3.4 KiB
3.4 KiB
Bold — Solicitar y consumir enlaces de pago
Requisitos previos
Tener configurada la pasarela Bold con una API key activa. Se gestiona desde:
POST /pasarelas/bold/save
1. Crear un enlace de pago
Endpoint: POST /pasarelas/bold/crear-link
Autenticación: requerida (sesión o token)
Request
POST /pasarelas/bold/crear-link
Content-Type: application/json
Authorization: <token>
{
"total_amount": 50000,
"description": "Renovación plan básico",
"reference": "REF-UNICA-001",
"payer_email": "cliente@correo.com",
"callback_url": "https://tudominio.com/pago-resultado"
}
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
total_amount |
int64 | ✅ | Monto en COP sin centavos (ej. 50000 = $50.000) |
description |
string | ✅ | Descripción visible en el checkout Bold |
reference |
string | ✅ | Referencia única por pago (usada para identificarlo) |
payer_email |
string | ❌ | Email del pagador (prellenado en el checkout) |
callback_url |
string | ❌ | URL de redirección tras el pago (override del config) |
Response 200 OK
{
"payment_link": "pl_abc123xyz",
"url": "https://checkout.bold.co/payment/pl_abc123xyz"
}
url→ redirige al usuario a esta URL para que complete el pago.payment_link→ ID del link, guárdalo para consultar su estado después.
2. Consultar el estado de un enlace
Endpoint: GET /pasarelas/bold/link/:linkID
Autenticación: requerida
GET /pasarelas/bold/link/pl_abc123xyz
Authorization: <token>
Response 200 OK
{
"data": "{ ...payload crudo de la API de Bold... }"
}
3. Webhook (notificación automática de Bold)
Bold notifica los pagos a:
POST /webhooks/bold
Esta ruta es pública (sin autenticación). Bold la llama automáticamente al completarse un pago. El sistema valida la firma HMAC-SHA256 y registra el evento en bold_webhook_log.
4. Usar el servicio directamente en Go
import (
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
"github.com/sujit-baniya/fiber-boilerplate/pkg/services"
)
cfg, err := models.GetBoldConfig()
if err != nil {
// sin configuración activa
}
result, err := services.CreateBoldPaymentLink(cfg, services.BoldPaymentLinkRequest{
AmountType: "CLOSE",
Amount: services.BoldAmountField{
Currency: "COP",
TotalAmount: 50000,
},
Description: "Renovación plan X",
Reference: "REF-UNICA-001",
PayerEmail: "cliente@correo.com",
})
if err != nil {
// error de la API Bold
}
checkoutURL := result.Payload.URL
linkID := result.Payload.PaymentLink
5. Polling automático
El sistema verifica pagos pendientes cada 15 minutos mediante un cron job (VerificarPagosBoldPendientes). Esto cubre los casos donde el webhook no llega.
Notas
referencedebe ser única por transacción. Reutilizarla puede causar conflictos al resolver el pago.- El modo activo (
test/production) y las API keys se configuran en la tablabold_config. Solo un registro puede estar activo a la vez. - En modo
testlasecret_keyes cadena vacía según la documentación oficial de Bold.