Parser ISO 8583
Analizar mensajes de transacciones ISO 8583
ISO 8583 es el estandar internacional para mensajes de transacciones con tarjeta, utilizado cada vez que acercas, deslizas o insertas una tarjeta de pago en un terminal.
Que es ISO 8583?
ISO 8583 es el estandar internacional que define el formato de mensaje para transacciones electronicas con tarjetas de pago. Cada vez que acercas tu tarjeta sin contacto, insertas un chip, deslizas una banda magnetica o realizas una compra en linea, los datos de la transaccion se codifican en un mensaje ISO 8583 que viaja desde el terminal de punto de venta a traves del adquirente, la red de tarjetas (Visa, Mastercard, etc.) y finalmente al emisor de la tarjeta para su autorizacion.
Publicado por primera vez en 1987, ISO 8583 ha pasado por tres versiones: 1987, 1993 y 2003. La version de 1987 sigue siendo la mas ampliamente implementada a nivel global, aunque muchas redes han adoptado elementos de las revisiones posteriores. El estandar es deliberadamente flexible — cada red de tarjetas (Visa, Mastercard, American Express, UnionPay) define su propia especificacion de implementacion construida sobre el marco ISO 8583.
El formato esta disenado para comunicacion de alta velocidad y bajo ancho de banda. A diferencia de XML o JSON, ISO 8583 utiliza un formato hibrido compacto de binario/texto que puede analizarse en microsegundos — un requisito critico cuando se procesan decenas de miles de transacciones por segundo.
Estructura del mensaje
Cada mensaje ISO 8583 consta de tres componentes: el Identificador de Tipo de Mensaje (MTI), uno o dos bitmaps, y los elementos de datos en si.
Identificador de Tipo de Mensaje (MTI)
El MTI de 4 digitos codifica cuatro datos:
| Digito | Significado | Valores |
|---|---|---|
| 1ro | Version ISO | 0 = 1987, 1 = 1993, 2 = 2003 |
| 2do | Clase de mensaje | 1 = Autorizacion, 2 = Financiero, 4 = Reverso, 8 = Gestion de red |
| 3ro | Funcion | 0 = Solicitud, 1 = Respuesta, 2 = Aviso, 3 = Respuesta de aviso |
| 4to | Origen | 0 = Adquirente, 1 = Repeticion adquirente, 2 = Emisor, 3 = Repeticion emisor |
Elementos de datos clave
| DE | Nombre | Formato | Descripcion |
|---|---|---|---|
| DE2 | Numero de cuenta primario | n..19 | El numero de tarjeta (PAN) — debe enmascararse en logs |
| DE3 | Codigo de procesamiento | n6 | Tipo de transaccion: 00=compra, 01=avance de efectivo, 20=reembolso |
| DE4 | Monto de la transaccion | n12 | Monto en unidades menores (centavos) — justificado a la derecha, rellenado con ceros |
| DE11 | Numero de auditoria de rastreo del sistema | n6 | Identificador unico de transaccion asignado por el adquirente |
| DE37 | Numero de referencia de recuperacion | an12 | Clave para busqueda y conciliacion de transacciones |
| DE38 | ID de respuesta de autorizacion | an6 | Codigo de aprobacion devuelto por el emisor |
| DE39 | Codigo de respuesta | an2 | 00=Aprobado, 05=No honrar, 51=Fondos insuficientes |
| DE41 | ID de terminal del aceptante | ans8 | Identificador unico del terminal POS |
| DE43 | Nombre/ubicacion del aceptante | ans40 | Nombre del comercio, ciudad, estado y pais |
Ciclo de vida de una transaccion
Un pago tipico con tarjeta involucra al menos dos mensajes ISO 8583:
- Solicitud de autorizacion (0100): El terminal envia una solicitud a traves del adquirente hacia la red de tarjetas y luego al emisor
- Respuesta de autorizacion (0110): El emisor devuelve una aprobacion (DE39 = “00”) o un rechazo con un codigo de respuesta
- Aviso financiero (0220): Despues de que el tarjetahabiente completa la transaccion, un mensaje financiero confirma el monto final
- Reverso (0420): Si la transaccion necesita anularse, un mensaje de reverso deshace la autorizacion
Para una compra en linea, el mismo flujo aplica — la pasarela de pagos de la plataforma de comercio electronico genera los mensajes ISO 8583 en nombre del adquirente.
Casos de uso comunes
- Pagos en punto de venta: Cada transaccion con chip, sin contacto y banda magnetica en un terminal fisico
- Retiros de cajero automatico: La dispensacion de efectivo utiliza mensajes 0200 (financieros) con codigo de procesamiento 01
- Transacciones de comercio electronico: Pagos con tarjeta en linea, incluyendo flujos de autenticacion 3D Secure
- Pagos recurrentes: Facturacion de suscripciones donde el comercio inicia transacciones sin la presencia del tarjetahabiente
- Reembolsos y reversos: Los mensajes 0400 (reverso) y 0200 con codigo de procesamiento 20 (reembolso) manejan las devoluciones
- Consultas de saldo: El codigo de procesamiento 31 consulta el saldo disponible sin debitar la cuenta
Prueba estos ejemplos
Una solicitud de autorizacion ISO 8583:1987 (MTI 0100) en formato clave-valor con DE2 (PAN), DE3 (codigo de procesamiento 000000 = compra), DE4 (monto $25.00), DE7 (fecha/hora de transmision), DE11 (STAN 051234), DE12/13 (hora/fecha local), DE22 (modo de ingreso POS), DE37 (referencia de recuperacion), DE41 (ID de terminal), DE43 (nombre/ubicacion del comercio) y DE49 (codigo de moneda 840 = USD).
DE0=0100
DE2=4761340000000014
DE3=000000
DE4=000000002500
DE7=0315121530
DE11=051234
DE12=121530
DE13=0315
DE22=051
DE25=00
DE37=000000000123
DE41=12345678
DE42=000000000000001
DE43=ACME GROCERY STORE NEW YORK NY US
DE49=840 MTI 9999 no es un identificador de tipo de mensaje ISO 8583 valido. El primer digito debe ser 0 o 1 (version), el segundo indica la clase de mensaje (1=autorizacion, 2=financiero, 4=reverso), el tercero es la funcion (0=solicitud, 1=respuesta, 2=aviso) y el cuarto es el origen (0=adquirente).
DE0=9999
DE2=4761340000000014
DE3=000000
DE4=000000001000