Saltar al contenido principal

Puntos Finales de Donaciones

El módulo de Donaciones gestiona donaciones, fondos, procesamiento de pagos, suscripciones, y operaciones financieras relacionadas. Admite múltiples pasarelas de pago (Stripe, PayPal), maneja donaciones únicas y recurrentes, rastrea lotes de donaciones, y proporciona procesamiento de webhooks para eventos de pago asíncronos.

Ruta base: /giving

Donaciones

Ruta base: /giving/donations

MétodoRutaAuthPermisoDescripción
GET/JWTDonations.View o propio personIdEnumera todas las donaciones. Filtra por ?batchId= o ?personId=
GET/:idJWTDonations.ViewObtener una donación por ID
GET/myJWTObtener donaciones del usuario actual
GET/summaryJWTDonations.ViewSummaryObtener resumen de donaciones. Filtra por ?startDate=&endDate=&type=. Usa type=person para desglose por persona
GET/testEmailPúblicoEnviar un correo de prueba (desarrollo/depuración)
POST/JWTDonations.EditCrear o actualizar donaciones (lote)
DELETE/:idJWTDonations.EditEliminar una donación

Ejemplo: Enumerar Donaciones por Lote

GET /giving/donations?batchId=abc-123
Authorization: Bearer <token>
[
{
"id": "don-456",
"batchId": "abc-123",
"personId": "per-789",
"donationDate": "2025-03-15T00:00:00.000Z",
"amount": 100.00,
"method": "card"
}
]

Ejemplo: Obtener Resumen de Donación

GET /giving/donations/summary?startDate=2025-01-01&endDate=2025-12-31
Authorization: Bearer <token>
[
{
"week": "2025-01-06",
"fund": "General Fund",
"totalAmount": 2500.00,
"count": 15
}
]

Lotes de Donaciones

Ruta base: /giving/donationbatches

Extiende GenericCrudController con rutas CRUD: getById, getAll, post, delete. La operación de eliminar también elimina todas las donaciones dentro del lote.

MétodoRutaAuthPermisoDescripción
GET/JWTDonations.ViewSummaryEnumera todos los lotes de donaciones
GET/:idJWTDonations.ViewSummaryObtener un lote de donaciones por ID
POST/JWTDonations.EditCrear o actualizar lotes de donaciones
DELETE/:idJWTDonations.EditEliminar un lote y todas sus donaciones

Donar

Ruta base: /giving/donate

Maneja el flujo de donación de cara al público incluyendo cargos, suscripciones, webhooks, y cálculos de tarifas. No se habilitan rutas CRUD base; todos los puntos finales son personalizados.

MétodoRutaAuthPermisoDescripción
GET/gateways/:churchIdPúblicoObtener pasarelas de pago disponibles para una iglesia (solo claves públicas)
POST/client-tokenJWTGenerar un token de cliente para inicialización de pasarela
POST/create-orderJWTCrear un pedido de pago (estilo de pago PayPal)
POST/chargeJWTProcesar un cargo de donación única
POST/subscribeJWTCrear una suscripción de donación recurrente
POST/logPúblicoRegistrar una donación. Cuerpo: { donation, fundData }
POST/webhook/:providerPúblicoRecibir eventos de webhook de pago (Stripe, PayPal). Requiere ?churchId=
POST/replay-stripe-eventsJWTDonations.EditReproducir eventos de Stripe para un rango de fechas. Cuerpo: { startDate, endDate, dryRun }
POST/feePúblicoCalcular tarifas de transacción. Cuerpo: { type, provider, gatewayId, amount, currency }. Requiere ?churchId=
POST/captcha-verifyPúblicoVerificar token de reCAPTCHA. Cuerpo: { token }

Ejemplo: Procesar un Cargo de Donación

POST /giving/donate/charge
Authorization: Bearer <token>

{
"provider": "stripe",
"amount": 50.00,
"currency": "usd",
"person": { "id": "per-123", "email": "donor@example.com" },
"funds": [{ "id": "fund-001", "name": "General Fund", "amount": 50.00 }],
"church": { "name": "First Church", "subDomain": "firstchurch" }
}
{
"id": "ch_abc123",
"status": "succeeded",
"provider": "stripe"
}

Ejemplo: Crear una Suscripción Recurrente

POST /giving/donate/subscribe
Authorization: Bearer <token>

{
"provider": "stripe",
"amount": 100.00,
"customerId": "cus_abc123",
"interval": { "interval_count": 1, "interval": "month" },
"billing_cycle_anchor": 1710460800,
"person": { "id": "per-123", "email": "donor@example.com" },
"funds": [{ "id": "fund-001", "name": "General Fund", "amount": 100.00 }],
"church": { "name": "First Church", "subDomain": "firstchurch" }
}
{
"id": "sub_xyz789",
"status": "active",
"provider": "stripe"
}

Fondos

Ruta base: /giving/funds

Extiende GenericCrudController con rutas CRUD: getById, getAll, post, delete. El permiso de view es null (no se requiere permiso para ver fondos).

MétodoRutaAuthPermisoDescripción
GET/JWTEnumera todos los fondos
GET/:idJWTObtener un fondo por ID
GET/churchId/:churchIdPúblicoObtener todos los fondos para una iglesia específica (público)
GET/public/:churchId/:fundId/total?startDate=&endDate=PúblicoObtener el total de donaciones de un fondo: { fundId, totalAmount, donationCount }. Alimenta el elemento campaignProgress del generador de sitios web
POST/JWTDonations.EditCrear o actualizar fondos
DELETE/:idJWTDonations.EditEliminar un fondo

Donaciones de Fondo

Ruta base: /giving/funddonations

Rastrea cómo se asignan las donaciones individuales entre fondos. No se habilitan rutas CRUD base; todos los puntos finales son personalizados.

MétodoRutaAuthPermisoDescripción
GET/JWTDonations.ViewEnumera donaciones de fondo. Filtra por ?donationId=, ?personId=, ?fundId=, o ?fundName=. Opcionalmente agrega ?startDate=&endDate= para filtrado por fecha
GET/:idJWTDonations.ViewObtener una donación de fondo por ID
GET/myJWTObtener las donaciones de fondo del usuario actual
POST/JWTDonations.EditCrear o actualizar donaciones de fondo (lote)
DELETE/:idJWTDonations.EditEliminar una donación de fondo

Pasarelas

Ruta base: /giving/gateways

Gestiona configuraciones de pasarela de pago (Stripe, PayPal, etc.). No se habilitan rutas CRUD base; todos los puntos finales son personalizados. Los secretos de pasarela se encriptan en reposo.

MétodoRutaAuthPermisoDescripción
GET/JWTEnumera todas las pasarelas de la iglesia
GET/:idJWTSettings.EditObtener una pasarela por ID
GET/churchId/:churchIdPúblicoObtener pasarelas para una iglesia (solo claves públicas)
GET/configured/:churchIdPúblicoVerificar si una iglesia tiene una pasarela de pago configurada
POST/JWTSettings.EditCrear o actualizar pasarelas (encripta claves, aprovisiona webhooks y productos)
PATCH/:idJWTSettings.EditActualizar parcialmente una pasarela
DELETE/:idJWTSettings.EditEliminar una pasarela (también elimina sus webhooks)

Ejemplo: Verificar Configuración de Pasarela

GET /giving/gateways/configured/church-123
{
"configured": true
}

Clientes

Ruta base: /giving/customers

Extiende GenericCrudController con rutas CRUD: getAll, delete. Vincula personas a sus registros de cliente de pasarela de pago.

MétodoRutaAuthPermisoDescripción
GET/JWTDonations.ViewSummaryEnumera todos los clientes
GET/:idJWTDonations.ViewSummary o registro propioObtener un cliente por ID
GET/:id/subscriptionsJWTDonations.ViewSummary o registro propioObtener suscripciones de pasarela para un cliente
DELETE/:idJWTDonations.EditEliminar un cliente

Suscripciones

Ruta base: /giving/subscriptions

Gestiona suscripciones de donación recurrentes. No se habilitan rutas CRUD base; todos los puntos finales son personalizados.

MétodoRutaAuthPermisoDescripción
GET/JWTDonations.ViewSummaryEnumera todas las suscripciones
GET/:idJWTDonations.ViewSummaryObtener una suscripción por ID
POST/JWTDonations.Edit o suscripción propiaActualizar suscripciones con la pasarela de pago
DELETE/:idJWTDonations.Edit o suscripción propiaCancelar una suscripción y eliminar de la base de datos. Cuerpo: { provider, reason }

Fondos de Suscripción

Ruta base: /giving/subscriptionfunds

Rastrea asignaciones de fondo para suscripciones recurrentes. No se habilitan rutas CRUD base; todos los puntos finales son personalizados.

MétodoRutaAuthPermisoDescripción
GET/JWTDonations.View o suscripción propiaEnumera fondos de suscripción. Filtra por ?subscriptionId=
GET/:idJWTDonations.ViewSummaryObtener un fondo de suscripción por ID
DELETE/:idJWTDonations.EditEliminar un fondo de suscripción
DELETE/subscription/:idJWTDonations.Edit o suscripción propiaEliminar todos los fondos de una suscripción

Métodos de Pago

Ruta base: /giving/paymentmethods

Gestiona métodos de pago almacenados (tarjetas, cuentas bancarias) a través de las APIs de la pasarela de pago. No se habilitan rutas CRUD base; todos los puntos finales son personalizados.

MétodoRutaAuthPermisoDescripción
GET/personid/:idJWTDonations.View o propio personIdObtener todos los métodos de pago almacenados para una persona (tarjetas, cuentas bancarias)
POST/addcardJWTAdjuntar un método de pago con tarjeta. Cuerpo: { id, personId, customerId, email, name, churchId, provider }
POST/updatecardJWTDonations.Edit o propio personIdActualizar detalles de tarjeta. Cuerpo: { personId, paymentMethodId, cardData, provider }
POST/ach-setup-intentJWTDonations.Edit o propio personIdCrear un SetupIntent de ACH de Stripe para vinculación de cuenta bancaria. Cuerpo: { personId, customerId, email, name, churchId }
POST/ach-setup-intent-anonPúblicoCrear un SetupIntent de ACH anónimo para donaciones de invitado. Cuerpo: { email, name, churchId, gatewayId }
POST/addbankaccountJWTDonations.Edit o propio personIdAgregar una cuenta bancaria vía token (obsoleto; usa ach-setup-intent). Cuerpo: { id, personId, customerId, email, name }
POST/updatebankJWTDonations.Edit o propio personIdActualizar detalles de cuenta bancaria. Cuerpo: { paymentMethodId, personId, bankData, customerId }
POST/verifybankJWTDonations.Edit o cliente propioVerificar una cuenta bancaria con micro-depósitos. Cuerpo: { paymentMethodId, customerId, amountData }
DELETE/:id/:customeridJWTDonations.Edit o cliente propioEliminar un método de pago (tarjeta o cuenta bancaria)

Registro de Eventos

Ruta base: /giving/eventLog

Extiende GenericCrudController con rutas CRUD: getById, getAll, post, delete. Rastrea eventos de webhook de pasarela de pago para auditoría y deduplicación.

MétodoRutaAuthPermisoDescripción
GET/JWTDonations.ViewSummaryEnumera todos los registros de evento
GET/:idJWTDonations.ViewSummaryObtener un registro de evento por ID
GET/type/:typeJWTDonations.ViewSummaryObtener registros de evento filtrados por tipo de evento
POST/JWTDonations.EditCrear o actualizar registros de evento
DELETE/:idJWTDonations.EditEliminar un registro de evento

Páginas Relacionadas