API Facturación Electrónica - Integración Maxgym
Crear Venta Maxgym
Endpoint: POST /api/v1/fe/create_sale_maxgym
Controller: FeController::createSaleMaxgym
Request Class: CreateSaleMaxgymRequest
Autenticación: Bearer Token requerido
Middleware: check.activate.organization
Descripción
Crea y emite una factura electrónica basada en datos provenientes de Maxgym (sistema de gestión para gimnasios y centros deportivos).
Estructura del Request
Evento Principal
| Campo |
Tipo |
Requerido |
Descripción |
idEvent |
string |
✅ |
ID único del evento (UUID) |
dateCreated |
string |
✅ |
Fecha de creación (ISO 8601) |
eventType |
string |
✅ |
Tipo de evento ("payment.succeeded") |
Datos de la Transacción
| Campo |
Tipo |
Requerido |
Descripción |
data.id |
string |
✅ |
ID único de la transacción |
data.idMember |
string |
✅ |
ID del miembro/cliente |
data.status |
integer |
✅ |
Estado del pago (1 = approved) |
data.statusName |
string |
✅ |
Nombre del estado |
data.paymentDate |
string |
✅ |
Fecha de pago (ISO 8601) |
data.transactionDate |
string |
✅ |
Fecha de transacción |
data.basePrice |
string |
✅ |
Precio base |
data.price |
string |
✅ |
Precio final |
data.discount |
number |
✅ |
Descuento aplicado |
data.units |
integer |
✅ |
Cantidad de unidades |
Datos del Miembro/Cliente
| Campo |
Tipo |
Requerido |
Descripción |
data.member.name |
string |
✅ |
Nombre del cliente |
data.member.lastName |
string |
✅ |
Apellido del cliente |
data.member.email |
string |
✅ |
Email del cliente |
data.member.documentNumber |
string |
✅ |
Número de documento/RUC |
data.member.address |
string |
❌ |
Dirección del cliente |
data.member.cp |
string |
❌ |
Código postal |
data.member.countryCode |
string |
❌ |
Código del país |
Líneas/Productos
| Campo |
Tipo |
Requerido |
Descripción |
data.lines[].idProduct |
string |
✅ |
ID del producto/servicio |
data.lines[].name |
string |
✅ |
Nombre del producto |
data.lines[].price |
string |
✅ |
Precio del producto |
Método de Pago
| Campo |
Tipo |
Requerido |
Descripción |
data.paymentMethod.name |
string |
❌ |
Nombre del método |
data.paymentMethod.last4 |
string |
❌ |
Últimos 4 dígitos (tarjetas) |
data.paymentMethod.brand |
string |
❌ |
Marca de la tarjeta |
data.paymentMethod.type |
integer |
✅ |
Tipo de pago (2 = card) |
data.paymentMethod.typeName |
string |
✅ |
Nombre del tipo |
Ejemplo de Request (Basado en Test)
{
"idEvent": "3918fcfc-f50f-4fb1-b003-cf964afce7bd",
"dateCreated": "2025-02-13T17:52:32Z",
"eventType": "payment.succeeded",
"data": {
"id": "Yaed",
"idMember": "Zav",
"member": {
"name": "sera 4",
"lastName": "abc",
"email": "smm034@gmail.com",
"documentNumber": "8-123-456",
"address": "aaaa 44 5",
"cp": "04769",
"countryCode": "PA"
},
"lines": [
{
"idProduct": "Z9l",
"name": "Membresía Mensual Premium",
"price": "63.45"
},
{
"idProduct": "MXR",
"name": "Entrenamiento Personal",
"price": "75.00"
},
{
"idProduct": "Bw1",
"name": "Clase de Spinning",
"price": "25.00"
}
],
"paymentMethod": {
"name": null,
"last4": "4242",
"brand": "visa",
"type": 2,
"typeName": "card"
},
"status": 1,
"statusName": "approved",
"paymentDate": "2025-02-13T17:24:00",
"transactionDate": "2025-02-13T17:25:00",
"basePrice": "163.45",
"price": "163.45",
"unitPrice": "0",
"idCoupon": null,
"discount": 0,
"units": 1,
"type": 5,
"typeName": "combo"
}
}
Respuesta de Éxito
{
"success": true,
"message": "Pago Maxgym procesado exitosamente",
"job_id": "uuid-generated-job-id",
"event_id": "3918fcfc-f50f-4fb1-b003-cf964afce7bd",
"member_id": "Zav"
}
Validaciones Específicas
Validación de RUC
Otras Validaciones
- Event Type: Debe ser "payment.succeeded"
- Status: Debe ser 1 (approved)
- Lines: Mínimo 1 producto/servicio
- Member: Información completa del cliente
- Payment Method: Método de pago válido
Casos de Uso
- Gimnasios: Membresías y servicios deportivos
- Centros de Fitness: Clases y entrenamientos
- Deportes: Alquiler de equipos y espacios
- Wellness: Servicios de bienestar y salud
Códigos de Respuesta HTTP
| Código |
Descripción |
| 200 |
Pago procesado exitosamente |
| 400 |
Datos de entrada inválidos |
| 401 |
No autorizado |
| 422 |
Error de validación |
| 500 |
Error interno del servidor |
Notas Técnicas
- Procesamiento: Asíncrono usando
CreateSaleMaxgymJob
- Webhook: Diseñado para recibir webhooks de Maxgym
- RUC: Validación específica para RUC panameños
- Monedas: USD, PAB soportadas
- Eventos: Solo procesa eventos "payment.succeeded"
- Combos: Soporte para paquetes y servicios combinados