Skip to main content

API de Pagos Unificada

La API de Pagos Unificada (versión 6) permite procesar transacciones con cualquier red de tarjeta — Visa, Mastercard y American Express — enviando exactamente el mismo body. El servidor detecta automáticamente la red a partir del número de tarjeta y enruta la operación al procesador correspondiente.


Autenticación

Todos los endpoints de esta API requieren un JWT enviado en el header Authorization.

Paso 1 — Obtener el token

POST /api/v2/auth
Content-Type: application/json

Body:

CampoTipoRequeridoDescripción
correostringCorreo electrónico del usuario
contrasenastringContraseña del usuario

Ejemplo:

curl -X POST https://webserver.zigu.mx/api/v2/auth \
-H "Content-Type: application/json" \
-d '{
"correo": "usuario@ejemplo.com",
"contrasena": "tu-contrasena"
}'

Respuesta exitosa (200):

{
"payload": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}

Respuesta de error (401):

"Usuario y/o contraseña incorrecto"

El token tiene una vigencia de 24 horas y está firmado con APP_SECRET.

Paso 2 — Incluir el token en cada petición

Añade el header Authorization con el prefijo BMToken seguido del token obtenido:

Authorization: BMToken eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
caution

Si el token está ausente, expirado o inválido, el servidor responde con 401 { "error": "No autorizado" }.


POST /api/v6/payment/charge

Procesa un cobro. La red de la tarjeta se detecta automáticamente.

URL: POST /api/v6/payment/charge
Autenticación: Authorization: BMToken <token>
Content-Type: application/json

Parámetros del body

Campos obligatorios

CampoTipoDescripción
cardNumberstringNúmero completo de la tarjeta (PAN)
expiryMonthstringMes de vencimiento (MM, ej. "07")
expiryYearstringAño de vencimiento (YY o YYYY, ej. "26" o "2026")
amountnumberMonto a cobrar en pesos con hasta 2 decimales (ej. 150.35)
orderIdstringIdentificador único del pedido en tu sistema
customerEmailstringCorreo electrónico del cliente
businessIdstringID del negocio registrado en la plataforma

Campos opcionales — Datos del cliente

CampoTipoDescripción
cvvstringCódigo de seguridad de la tarjeta
customerFirstNamestringNombre del cliente
customerLastNamestringApellido del cliente
customerIpstringIP del cliente (solo aplica para Visa/Mastercard)
currencystringMoneda. Default: "MXN"

Campos opcionales — Dirección de facturación (solo Visa/Mastercard)

Estos campos solo se envían al procesador cuando la tarjeta no es Amex.

CampoTipoDescripción
billingAddressstringDirección (calle y número)
billingCitystringCiudad
billingStatestringEstado
billingZipstringCódigo postal
billingCountrystringPaís en formato ISO 3166-1 alpha-2. Default: "MX"

Campos opcionales — 3D Secure

Aplican tanto para Amex como para Visa/Mastercard.

CampoTipoDescripción
authenticationValuestringValor de autenticación 3DS (CAVV/AAV)
ecistringElectronic Commerce Indicator. Default: "05" si se incluye authenticationValue

Campos opcionales — Meses sin intereses (MSI)

CampoTipoDescripción
planTypestringTipo de plan de financiamiento
installmentsnumberNúmero de meses. Default: 1

Ejemplos

Cobro básico (Visa o Mastercard):

curl -X POST https://webserver.zigu.mx/api/v6/payment/charge \
-H "Authorization: BMToken eyJhbGciOi..." \
-H "Content-Type: application/json" \
-d '{
"cardNumber": "4111111111111111",
"expiryMonth": "12",
"expiryYear": "26",
"cvv": "123",
"amount": 500.00,
"currency": "MXN",
"orderId": "ORDEN-001",
"customerEmail": "cliente@ejemplo.com",
"customerFirstName": "Juan",
"customerLastName": "García",
"businessId": "clbusiness123",
"billingAddress": "Av. Insurgentes 1234",
"billingCity": "Ciudad de México",
"billingState": "CDMX",
"billingZip": "06600",
"billingCountry": "MX"
}'

Cobro con tarjeta Amex (mismo endpoint, sin datos de dirección):

curl -X POST https://webserver.zigu.mx/api/v6/payment/charge \
-H "Authorization: BMToken eyJhbGciOi..." \
-H "Content-Type: application/json" \
-d '{
"cardNumber": "378282246310005",
"expiryMonth": "12",
"expiryYear": "26",
"cvv": "1234",
"amount": 500.00,
"orderId": "ORDEN-002",
"customerEmail": "cliente@ejemplo.com",
"businessId": "clbusiness123"
}'

Cobro con 3D Secure:

curl -X POST https://webserver.zigu.mx/api/v6/payment/charge \
-H "Authorization: BMToken eyJhbGciOi..." \
-H "Content-Type: application/json" \
-d '{
"cardNumber": "4111111111111111",
"expiryMonth": "12",
"expiryYear": "26",
"amount": 1200.00,
"orderId": "ORDEN-003",
"customerEmail": "cliente@ejemplo.com",
"businessId": "clbusiness123",
"authenticationValue": "AAABBkIgAAAAAAAAQxhAAAAAAAA=",
"eci": "05"
}'

Cobro a meses sin intereses:

curl -X POST https://webserver.zigu.mx/api/v6/payment/charge \
-H "Authorization: BMToken eyJhbGciOi..." \
-H "Content-Type: application/json" \
-d '{
"cardNumber": "4111111111111111",
"expiryMonth": "12",
"expiryYear": "26",
"amount": 3600.00,
"orderId": "ORDEN-004",
"customerEmail": "cliente@ejemplo.com",
"businessId": "clbusiness123",
"planType": "MSI",
"installments": 12
}'

Respuesta exitosa (200)

{
"success": true,
"transactionId": "1234567890",
"status": "APPROVED",
"statusMessage": "APPROVED",
"authCode": "ABC123",
"amount": 500.00,
"currency": "MXN",
"orderId": "ORDEN-001",
"cardBrand": "VISA",
"last4": "1111",
"apiResponse": "00",
"apiAdvice": ""
}
CampoTipoDescripción
successbooleantrue si la transacción fue aprobada
transactionIdstringID de la transacción en el procesador (usar para reversos)
statusstringEstado de la transacción (APPROVED, DECLINED, etc.)
statusMessagestringDescripción del estado
authCodestringCódigo de autorización del procesador
amountnumberMonto cobrado
currencystringMoneda
orderIdstringIdentificador del pedido enviado en el request
cardBrandstringRed detectada: VISA, MASTERCARD o AMEX
last4stringÚltimos 4 dígitos de la tarjeta
apiResponsestringCódigo de respuesta interno del gateway
apiAdvicestringMensaje de asesoría del gateway

Códigos de error

Código HTTPCausaRespuesta
400Parámetros inválidos o faltantes{ "error": "mensaje de validación" }
400Red de tarjeta no reconocida{ "error": "Marca de tarjeta no reconocida" }
401Token ausente o inválido{ "error": "No autorizado" }
404businessId no existe{ "error": "Negocio no encontrado" }
502Fallo en la tokenización de la tarjeta{ "error": "No se pudo tokenizar la tarjeta", "detail": {...} }
500Error interno del servidor{ "error": "mensaje de error" }

Notas importantes

  • Formato del monto: siempre en pesos mexicanos con hasta 2 decimales (ej. 150.35). El servidor lo normaliza internamente a "150.35" antes de enviarlo al gateway.
  • Conserva el transactionId: el valor transactionId de la respuesta del cobro es el que debes usar en los endpoints de /reverse. Corresponde al TRANS_ID del gateway.
  • Redes soportadas: solo se aceptan tarjetas Visa (4...), Mastercard (51–55... / 22–27...) y American Express (34... / 37...).
  • Vigencia del token JWT: 24 horas. Repite el flujo de autenticación una vez vencido.