Создать сообщение ISO 8583
Я пытаюсь создать сообщение ISO 8583, используя библиотеку openiso8583
Не было поля № 17 (Date
, capture
) поэтому я расширил класс.
Iso8583Finacle msg = new Iso8583Finacle();
msg.MessageType = Iso8583.MsgType._0120_AUTH_ADV;
msg[Iso8583Finacle.Bit._003_PROC_CODE] = "310000";
msg[Iso8583Finacle.Bit._004_TRAN_AMOUNT] = "0000000000000000";
msg[Iso8583Finacle.Bit._011_SYS_TRACE_AUDIT_NUM] = "380767397537";
msg[Iso8583Finacle.Bit._012_LOCAL_TRAN_DATETIME] = "20131003075957";
msg[Iso8583Finacle.Bit._017_CAPTURE_DATE] = "20131003";
Тем не менее, это выдает ошибку.
UnknownFieldException не было обработано
Поле 17 неизвестно
Может кто-нибудь сказать мне, как правильно расширить класс сообщения?
2 ответа
Когда вы расширяете класс, вам необходимо переопределить метод CreateField, чтобы вернуть правильно отформатированное поле. Взгляните на вики-страницу для расширения сообщения
https://code.google.com/p/openiso8583net/wiki/ExtendingIso8583
Корень вашей проблемы в том, что DE017 должен иметь длину 4 в формате MMDD, вы предоставляете дату формата YYYYDDMM для поля, которое слишком велико и может не пройти некоторые проверки редактирования, даже если оно попыталось усечь это не могло сделать месяц = 20, поскольку это неверно.