es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agregando la longitud en hexadecimal de 2 bytes a un mensaje Iso8583 utilizando JPOS.

Estoy usando JPOS para enviar una solicitud de red 0800. Pero el problema es que la longitud de encabezado de 2 bytes no se añade a mi mensaje.
La longitud del mensaje es 42, pero al agregar el encabezado de 2 bytes debería ser 44.

TCP DUMP:

longitud 42
0x0000: 4500 005e 4448 4000 4006 8842 0a14 5140 E..^DH@.@..B..Q@
0x0010: 0a5f 085d 952e 30c8 5cdb c683 49e6 692d ._.]..0....I.i-
0x0020: 8018 01f6 6e60 0000 0101 080a 0775 0600 ....n`.......u..
0x0030: 889f a492 3038 3030 8220 0100 0000 0000 ....0800........
0x0040: 0400 0000 0000 0000 3132 3234 3139 3035 ........12241905
0x0050: 3136 3132 3033 3437 3030 3130 3033 16120347001003

Ya que mi mensaje tiene una longitud de 42, se debe agregar 002A en el volcado hexadecimal.

El mensaje debería ser:


Mi Código:
BaseChannel channel = new NACChannel(packager, null);
channel.setHost("xx.xx.xx.xx", xxxxx);
channel.connect();
ISOMsg isoMsg = new ISOMsg();
isoMsg.setPackager(packager);
isoMsg.setMTI("0800");
isoMsg.set(7, "1224190516");
isoMsg.set(11, "120347");
isoMsg.set(24, "001");
isoMsg.set(70, "003");
byte[] send_PackedRequestData = isoMsg.pack();
channel.send(send_PackedRequestData);

¿Cómo puedo agregar la longitud del mensaje al principio para que se convierta en:


002A0800................1224190516120347001003

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar la longitud del mensaje al inicio del mensaje, puedes modificar tu código para incluir la longitud de la cabecera. Aquí tienes un ejemplo:

    BaseChannel channel = new NACChannel(packager, null);
    channel.setHost("xx.xx.xx.xx", xxxxx);
    channel.connect();
    ISOMsg isoMsg = new ISOMsg();
    isoMsg.setPackager(packager);
    isoMsg.setMTI("0800");
    isoMsg.set(7, "1224190516");
    isoMsg.set(11, "120347");
    isoMsg.set(24, "001");
    isoMsg.set(70, "003");
    
    // obtener los bytes del mensaje empaquetado
    byte[] packedRequestData = isoMsg.pack();
    
    // agregar la longitud del mensaje al inicio
    int messageLength = packedRequestData.length;
    byte[] header = new byte[2];
    header[0] = (byte) (messageLength / 256);
    header[1] = (byte) (messageLength % 256);
    byte[] requestWithHeader = new byte[header.length + packedRequestData.length];
    System.arraycopy(header, 0, requestWithHeader, 0, header.length);
    System.arraycopy(packedRequestData, 0, requestWithHeader, header.length, packedRequestData.length);
    
    channel.send(requestWithHeader);
    

    En este código, primero obtenemos la representación del mensaje en forma de arreglo de bytes utilizando isoMsg.pack(). Luego, calculamos la longitud del mensaje y creamos una cabecera de dos bytes dividiendo esta longitud en dos partes. Luego, agregamos esta cabecera al inicio del mensaje original utilizando System.arraycopy(). Finalmente, enviamos el nuevo mensaje (con cabecera) utilizando channel.send().

    Con estos cambios, cuando se envíe el mensaje, debería tener la longitud y formato esperados:

    002A0800................1224190516120347001003
    

Comments are closed.