Перейти к содержимому

alexanderTest

Регистрация: 14 ноя 2019
Offline Активность: 30 дек 2019 11:22
-----

Мои сообщения

В теме: Создание правильного сообщения формата iso8583 и отправка его с помощь

30 декабря 2019 - 11:22

Можете закрывать, я разобрался. Спасибо всем.


В теме: Создание правильного сообщения формата iso8583 и отправка его с помощь

21 ноября 2019 - 15:45

Еще вот такой код распарсивания iso 8583 попробывал:

import org.jpos.iso.packager.ISO87BPackager;
import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.jpos.iso.ISOUtil;

public class ParseISOMsg {
public static void main(String[] args) throws ISOException {
String hexmsg = "3038313082200000020000000400000000000000111312532012345630300301";
// convert hex string to byte array
byte[] bmsg =ISOUtil.hex2byte(hexmsg);
ISOMsg m = new ISOMsg();
// set packager, change ISO87BPackager for the matching one.
m.setPackager(new ISO87BPackager());
//unpack the message using the packager
m.unpack(bmsg);
//dump the message to standar output
m.dump(System.out, "");
}
}

 

Выдает :

Exception in thread "main" org.jpos.iso.ISOException: org.jpos.iso.IFB_NUMERIC: Problem unpacking field 23 (java.lang.ArrayIndexOutOfBoundsException: 32) unpacking field=23, consumed=31
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:340)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:468)
at ParseISOMsg.main(ParseISOMsg.java:17)

В теме: Создание правильного сообщения формата iso8583 и отправка его с помощь

21 ноября 2019 - 10:16

isoMessageUnpack.getField(7) а точно просто цифрой 7, а не FIELDS.F7_TransmissionDataTime

так null выдает. 


В теме: Создание правильного сообщения формата iso8583 и отправка его с помощь

20 ноября 2019 - 13:53

Вроде разобрался теперь ответ не распаковывается ответ

 

public class ClientSocket {
//Должно получиться 30 38 30 30 82 20 00 00 00 00 00 00 04 00 00 00 00 00 00 00 11 13 12 53 20 12 34 56 03 01
//Сейчас 30 38 30 30 82 20 08 00 22 20 00 00 00 00 00 00 00 00 00 00 11 13 12 53 20 12 34 56 03 01
public static void main(String[] args) throws ISOException, ISOClientException, IOException, org.jpos.iso.ISOException {
ISOMessage isoMessage = ISOMessageBuilder.Packer(VERSION.V1987)
.defaultMan()
.mti(MESSAGE_FUNCTION.Request, MESSAGE_ORIGIN.Acquirer)
.processCode("0000000")
.setField(FIELDS.F7_TransmissionDataTime, "1113125320")
.setField(FIELDS.F11_STAN, "1234560301")
.setHeader("303830308220")
.build();

ISOClient client = ISOClientBuilder.createSocket("172.20.104.69", 5803)
.build();
System.out.println("isoMessage " + isoMessage);


client.connect();
byte[] response = client.sendMessageSync(isoMessage);
System.out.println("responseByte " + response);
System.out.println("response = " + Arrays.toString(response));
String hexString = StringUtil.fromByteArray(response);
System.out.println("response(hexString) = " + hexString);
client.disconnect();
// ParseISOMsg.parseISOMsg(hexString);
ISOMessage isoMessageUnpack = ISOMessageBuilder.Unpacker()
.setMessage(hexString)
.build();
byte[] body = isoMessage.getBody();
System.out.println("isoMessageUnpack " + isoMessageUnpack.getField(7));
}
}

 

response = [48, 56, 49, 48, -126, 32, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 17, 19, 18, 83, 32, 18, 52, 86, 48, 48, 3, 1]
response(hexString) = 3038313082200000020000000400000000000000111312532012345630300301
Exception in thread "main" com.imohsenb.ISO8583.exceptions.ISOException: Field No 7 does not exists
at com.imohsenb.ISO8583.entities.ISOMessage.getField(ISOMessage.java:84)
at ClientSocket.main(ClientSocket.java:49)
 
Может специальная кодировка. Может подскажете направление как это перевести примерно вот в такое:
 
Догадываюсь что там это, так как вижу ответ этот в логах :
Message type 0810
P0007 Transmission date and time LEN=10 OFFS=20 '0000000000'
P0011 Systems Trace Audit Number LEN=6 OFFS=30 '000000'
P0039 Response code LEN=2 OFFS=36 '00'
P0006 Network Management Code LEN=3 OFFS=38 '000'

В теме: Создание правильного сообщения формата iso8583 и отправка его с помощь

19 ноября 2019 - 15:05

Попробовал другой клиент:

public static void main (String[] args) throws Exception {
Logger logger = new Logger();
logger.addListener (new SimpleLogListener (System.out));
ISOChannel channel = new ASCIIChannel (
"172.20.104.69", 5803, new ISO87APackager()
);
((LogSource)channel).setLogger (logger, "test-channel");
channel.connect ();
ISOMsg m = new ISOMsg ();
m.setMTI ("0800");
m.set (3, "000000");
m.set (41, "00000001");
m.set (70, "301");
channel.send (m);
ISOMsg r = channel.receive ();
channel.disconnect ();
}

 

Выдает исключение:

Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at org.jpos.iso.channel.ASCIIChannel.getMessageLength(ASCIIChannel.java:111)
at org.jpos.iso.BaseChannel.receive(BaseChannel.java:712)
at JposClient.main(JposClient.java:29)
 
Может подскажите пожалуйста, кто может знает, рабочие клиенты для работы с iso8583 ?