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

Автоматизация функционального тестирования
онлайн, начало 13 декабря
Python для начинающих
онлайн, начало 11 декабря
Школа для начинающих тестировщиков
онлайн, начало 12 декабря
Комплексная система подготовки к сертификации ISTQB FL (КСП ISTQB)
онлайн, начало 9 декабря
Фотография

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


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 alexanderTest

alexanderTest

    Новый участник

  • Members
  • Pip
  • 9 сообщений

Отправлено 14 Ноябрь 2019 - 09:41

Здравствуйте. Кто нибудь работал с форматом iso8583. Нашел библиотеку https://github.com/i...age-Client-java .

 

Но правильно не собирает.

Передать:

Message size 30

Message type 0800
P0007 Transmission Date and Time LEN=10 OFFS=20 '1113085120'
P0011 Systems Trace Audit Number LEN=6 OFFS=25 '851694'
P0070 Network Management Code LEN=3 OFFS=28 '001'

 

Нужно собрать подобное сообщение (формат iso8583) :

00 1e 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

Сейчас формируется неправильное сообщение подобное этому:

3038303082200800222000000000000000000011130851201234560301

 

Можете подсказать может другие библиотеки или как формировать подобные сообщения средствами java ?

 


  • 0

#2 Freiman

Freiman

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 453 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 14 Ноябрь 2019 - 11:17

Да, что-то совсем не то сбилдилось.

А исходный код можете показать?


  • 0

#3 alexanderTest

alexanderTest

    Новый участник

  • Members
  • Pip
  • 9 сообщений

Отправлено 14 Ноябрь 2019 - 12:08

Вот сбилдилось. Но как то неправильно формирует данные:

Вот код:

 

public class newClient2 {
public static void main(String[] args) throws ISOException, ISOClientException, IOException {
ISOMessage isoMessage = ISOMessageBuilder.Packer(VERSION.V1987)
.networkManagement()
.mti(MESSAGE_FUNCTION.Request, MESSAGE_ORIGIN.Acquirer)
.processCode("000000")
.setField(FIELDS.F7_TransmissionDataTime, "1113085120")
.setField(FIELDS.F11_STAN, "1234560301")
.setHeader("303830308220")
.build();

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

client.connect();
String response = Arrays.toString(client.sendMessageSync(isoMessage)) ;
System.out.println("response = " + response);
client.disconnect();

}
}

 

Формируется такое сообщение :

3038303082200800222000000000000000000011130851201234560301

 

А я хочу вот такое сообщение:

00 1e 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

 

И вообще цель написать такой конвертер который из обычных данных (десятичного формата, обычных букв, времени) конвертировал бы в iso8583


  • 0

#4 alexanderTest

alexanderTest

    Новый участник

  • Members
  • Pip
  • 9 сообщений

Отправлено 14 Ноябрь 2019 - 14:37

Да, что-то совсем не то сбилдилось.

А исходный код можете показать?

Исходный код на java сверху


  • 0

#5 alexanderTest

alexanderTest

    Новый участник

  • Members
  • Pip
  • 9 сообщений

Отправлено 15 Ноябрь 2019 - 15:27

На сервере ошибка Error message: TParser::GetMMDDHHMMSSFieldBCD: could not ParseMMDDHHMMSSbcd. Что то не так с полем номер 7. Подскажите пожалуйста как решить это.


  • 0

#6 Little_CJIOH

Little_CJIOH

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 430 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 16 Ноябрь 2019 - 17:21

Вот сбилдилось. Но как то неправильно формирует данные:
Вот код:
 
public class newClient2 {
public static void main(String[] args) throws ISOException, ISOClientException, IOException {
ISOMessage isoMessage = ISOMessageBuilder.Packer(VERSION.V1987)
.networkManagement()
.mti(MESSAGE_FUNCTION.Request, MESSAGE_ORIGIN.Acquirer)
.processCode("000000")
.setField(FIELDS.F7_TransmissionDataTime, "1113085120")
.setField(FIELDS.F11_STAN, "1234560301")
.setHeader("303830308220")
.build();

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

client.connect();
String response = Arrays.toString(client.sendMessageSync(isoMessage)) ;
System.out.println("response = " + response);
client.disconnect();

}
}
 
Формируется такое сообщение :
3038303082200800222000000000000000000011130851201234560301
 
А я хочу вот такое сообщение:
00 1e 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
 
И вообще цель написать такой конвертер который из обычных данных (десятичного формата, обычных букв, времени) конвертировал бы в iso8583

Нифига не смыслю в вашем протоколе, но у вас явно в header не хватает 00 1e в начале
и посчитайте количество байт, если оно у вас съехало из за пропущенных символов, то у вас минуты попадают в месяцы,а парсер не знает 53 месяца.

ЗЫЖ у вас там 3-х пар символов не хватает, если исходить из предположения что длина сообщения фиксированная.

ЗЫЗЫЖ возможно 001e добавится автоматически на транспортном уровне, тогда у вас просто где-то продолбалась пара символов.
  • 0

#7 alexanderTest

alexanderTest

    Новый участник

  • Members
  • Pip
  • 9 сообщений

Отправлено 18 Ноябрь 2019 - 07:47

Должно получиться:
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 data
 
Формируется: 
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
 
Не понимаю откуда берутся : 08 00 22 20

  • 0

#8 alexanderTest

alexanderTest

    Новый участник

  • Members
  • Pip
  • 9 сообщений

Отправлено 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 ?

  • 0

#9 Little_CJIOH

Little_CJIOH

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 430 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 20 Ноябрь 2019 - 09:32

Я подозреваю что оба клиента рабочие.
Вернитесь лучше к первому, он у вас как минимум ответ от сервера получал. И разберитесь что это за поля, почему в них есть какие-то значения и в какой момент они ставятся.
  • 0

#10 alexanderTest

alexanderTest

    Новый участник

  • Members
  • Pip
  • 9 сообщений

Отправлено 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'

  • 0

#11 Little_CJIOH

Little_CJIOH

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 430 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 20 Ноябрь 2019 - 14:42

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

#12 alexanderTest

alexanderTest

    Новый участник

  • Members
  • Pip
  • 9 сообщений

Отправлено 21 Ноябрь 2019 - 10:16

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

так null выдает. 


  • 0

#13 alexanderTest

alexanderTest

    Новый участник

  • Members
  • Pip
  • 9 сообщений

Отправлено 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)

  • 0


Программирование на С# для тестировщиков
онлайн
Автоматизатор мобильных приложений
онлайн
Selenium WebDriver: полное руководство
онлайн
Программирование на Python для тестировщиков
онлайн



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Яндекс.Метрика
Реклама на портале