user3576883
user3576883

Reputation: 11

How to parse a given line using jPOS?

I use this code:

    import org.jpos.iso.ISOPackager;
    import org.jpos.iso.packager.GenericPackager;
    import org.jpos.iso.packager.ISO87BPackager;
    import org.jpos.iso.ISOException;
    import org.jpos.iso.ISOMsg;
    import org.jpos.iso.ISOUtil;
    import org.junit.Assert;
    
    public class Utils {
        public static ISOMsg ParseIsoMessage(String hexMsg) throws ISOException {
            // convert hex string to byte array
            byte[] bmsg =ISOUtil.hex2byte(hexMsg);
            ISOMsg mes = new ISOMsg();
            // set packager, change ISO87BPackager for the matching one.
            mes.setPackager(new GenericPackager("resources\\packager.xml"));
            //unpack the message using the packager
            mes.unpack(bmsg);
            //dump the message to standar output
            mes.dump(System.out, "");
            return mes;
        }
    }

102 field in

    packager.xml (
copy with iso87binary.xml with one change):
<isofield
        id="102"
        length="28"
        name="ACCOUNT IDENTIFICATION 1"
        class="org.jpos.iso.IFB_LLCHAR"/>
    

An error is issued:

 org.jpos.iso.ISOException: org.jpos.iso.IFB_LLCHAR: Problem unpacking field 102 (java.lang.ArrayIndexOutOfBoundsException: 10187) unpacking field=102, consumed=10187

    at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:340)
    at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:468)
    at Utils.ParseIsoMessage(Utils.java:17)
    at TestHostToHost.test0100(TestHostToHost.java:122)

Please help me figure out what the problem is. Maybe another class needs to register 55 field in packager? I tried different. How to solve this problem?

String for parsing: 30313130F66032810EC3A200000000000701000019070133300400000000110000000000000010001234567890121216161120123456781829510222064300000006555444303739353633313830373739363937425A4E303052553435303039393233343233343533342020202020200032393038303032303539313930303133393536303131303030303030303030303800243831393030317A3835363031313030303030303030303038064306430042910A12073E49A98826FD3030711C861A84DA0000158003770C060000271000000190A534793E8E0B5CF617464E5F4143434F554E545F4944454E543117464E5F4143434F554E545F4944454E543217464E5F5452414E535F4445534352495054000085F053C1024204E31DC11B54504F5254414C2020202020202020202020202020202020202020E41381024401820513102800058306131028100454EA19FF0116D103543233D2024204D3034202D5D5024210D9025431

About this data is stored in this line:

Message size 587
Message type 0100
P0002 PAN LEN=19 OFFS=21 '7013330040000000011'
P0003 Processing Code LEN=6 OFFS=31 '000000'
    P0003-01 Transaction Type LEN=2 OFFS=31 '00'
    P0003-02 Account Type (From) LEN=2 OFFS=32 '00'
    P0003-03 Account Type (To) LEN=2 OFFS=33 '00'
P0004 Amount, Transaction LEN=12 OFFS=34 '000000001000'
P0006 Amount, Cardholder Billing LEN=12 OFFS=40 '123456789012'
P0007 Transmission Date and Time  LEN=10 OFFS=46 '1127125301'
P0010 Conversion Rate, Cardholder Billing LEN=8 OFFS=51 '12345678'
P0011 Systems Trace Audit Number LEN=6 OFFS=55 '000082'
P0012 Time, Local Transaction LEN=6 OFFS=58 '125300'
P0013 Date, Local Transaction LEN=4 OFFS=61 '1127'
P0014 Date expiration LEN=4 OFFS=63 '2002'
P0018 Merchant Type LEN=4 OFFS=65 '1111'
P0019 Acq. Inst. Country Code LEN=3 OFFS=67 '222'
P0020 PAN Country Code LEN=3 OFFS=69 '643'
P0022 POS Entry Mode LEN=3 OFFS=71 '951'
P0023 Card Sequence Number LEN=3 OFFS=73 '000'
P0025 POS Condition Code LEN=2 OFFS=75 '00'
P0026 POS PIN Capture Code LEN=2 OFFS=76 '12'
P0028 Amount, Transaction Fee LEN=9 OFFS=77 '123456789'
P0032 Acquiring Inst. Ident Code LEN=6 OFFS=87 '555444'
P0033 Forwarding Inst. Ident. Code LEN=11 OFFS=91 '12345678901'
P0035 Track-2 Data LEN=37 OFFS=98 '7013330040000000011=70133300400000020'
P0037 Retrieval reference number LEN=12 OFFS=117 '511302068006'

(Wed Nov 27 2019 18:14:10.959000) 
P0041 Card Acceptor Terminal Id LEN=8 OFFS=129 'RU450099'
P0042 Card Acceptor Ident. Code LEN=15 OFFS=137 '234234534      '
P0043 Card Acceptor Name/Location LEN=40 OFFS=152 'GPN                     >Arhagelsk    RU'
P0045 Track-1 Data LEN=54 OFFS=193 'B4000001234567890^IVANOV/ABRAM^03101011123400567000000'
P0047 Proprietary Field 47 LEN=41 OFFS=249 '90800205918003101919001395601100000000008'
P0048 Proprietary Field 48 LEN=24 OFFS=292 '819001z85601100000000008'
P0049 Currency Code, Transaction LEN=3 OFFS=316 '643'
P0051 Currency Code, Cardholder Billing LEN=3 OFFS=318 '643'
P0055 Smart Card Specific Data LEN=99 OFFS=322 '9F3303E0F0C8950528000080009F37047EB5DF209F3602000182023C009C01009F1A0206439A031911279F02060000000010005F2A0206439F2701809F34034103029F101306010A03A430000B000000000003E0F34C860D9F2608B35C4C87CF835226'
    P0055-9F33 Terminal Capabilities                   LEN=3 OFFS=325 'E0F0C8'
    P0055-0095 TVR                                     LEN=5 OFFS=330 '2800008000'
    P0055-9F37 Unpredictable number                    LEN=4 OFFS=338 '7EB5DF20'
    P0055-9F36 Application transaction counter         LEN=2 OFFS=345 '0001'
    P0055-0082 App interchange profile                 LEN=2 OFFS=349 '3C00'
    P0055-009C Transaction Type                        LEN=1 OFFS=353 '00'
    P0055-9F1A Terminal Country Code                   LEN=2 OFFS=357 '0643'
    P0055-009A Transaction Date                        LEN=3 OFFS=361 '191127'
    P0055-9F02 Amount, Authorised                      LEN=6 OFFS=367 '000000001000'
    P0055-5F2A Transaction Currency Code               LEN=2 OFFS=376 '0643'
    P0055-9F27 Cryptogram info                         LEN=1 OFFS=381 '80'
    P0055-9F34 CVM results                             LEN=3 OFFS=385 '410302'
    P0055-9F10 Issuer application data                 LEN=19 OFFS=391 '06010A03A430000B000000000003E0F34C860D'
    P0055-9F26 ARQC                                    LEN=8 OFFS=413 'B35C4C87CF835226'
P0102 Account Identification-1 LEN=17 OFFS=429 'FN_ACCOUNT_IDENT1'
P0103 Account Identification-2 LEN=17 OFFS=447 'FN_ACCOUNT_IDENT2'
P0104 Transaction Description LEN=17 OFFS=465 'FN_TRANS_DESCRIPT'
P0112 Proprietary Field 112 LEN=88 OFFS=485 'F056C1024204E31DC11B54504F5254414C2020202020202020202020202020202020202020E41381024401820513102800058306131028100454EA1CFF0119D103543233D2034204D0D3034202D5D50442010D00D9025431'
    F0 Local fleet data            LEN=86 OFFS=487 'C1024204E31DC11B54504F5254414C2020202020202020202020202020202020202020E41381024401820513102800058306131028100454EA1CFF0119D103543233D2034204D0D3034202D5D50442010D00D9025431'
      C1 Protocol Version            LEN=2 OFFS=489 '4204'
      E3 Vehicle And Driver info     LEN=29 OFFS=493 'C11B54504F5254414C2020202020202020202020202020202020202020'
      E4 POS Additional Info         LEN=19 OFFS=524 '81024401820513102800058306131028100454'
      EA Commodity Info              LEN=28 OFFS=545 'FF0119D103543233D2034204D0D3034202D5D50442010D00D9025431'
        FF01 LEN=25 OFFS=548
          D1 Commodity Code              LEN=3 OFFS=550 'T23'
          D2 Quantity                    LEN=3 OFFS=555 '4204D0 (40000)'
          D3 Price                       LEN=3 OFFS=560 '4202D5 (25000)'
          D5 Cost                        LEN=4 OFFS=565 '42010D00 (100000)'
          D9 Additional Data             LEN=2 OFFS=571 'T1'

Upvotes: 1

Views: 1605

Answers (2)

Kyrylo Semenko
Kyrylo Semenko

Reputation: 956

I tried to unpack the above message using the iso-8583-packer library, the message contains the following data

<f name="Root">
    <f name="MTI" val="0110" valHex="30313130"/>
    <f name="Bitmap" bitSet="{1, 2, 3, 4, 6, 7, 10, 11, 19, 20, 23, 25, 32, 37, 38, 39, 41, 42, 47, 48, 49, 51, 55, 102, 103, 104, 112}">
        <f name="PAN" fieldNum="2" val="1907013330040000000011"/>
        <f name="Processing Code" fieldNum="3">
            <f name="01 Transaction Type" val="00"/>
            <f name="02 Account Type (From)" val="00"/>
            <f name="03 Account Type (To)" val="00"/>
        </f>
        <f name="Amount, Transaction" fieldNum="4" val="000000001000"/>
        <f name="Amount, Cardholder Billing" fieldNum="6" val="123456789012"/>
        <f name="Transmission Date and Time" fieldNum="7" val="1216161120"/>
        <f name="Conversion Rate, Cardholder Billing" fieldNum="10" val="12345678"/>
        <f name="Systems Trace Audit Number" fieldNum="11" val="182951"/>
        <f name="Acq. Inst. Country Code" fieldNum="19" val="222" valHex="0222"/>
        <f name="PAN Country Code" fieldNum="20" val="643" valHex="0643"/>
        <f name="Card Sequence Number" fieldNum="23" val="000" valHex="0000"/>
        <f name="POS Condition Code" fieldNum="25" val="0006"/>
        <f name="Acquiring Inst. Ident Code" fieldNum="32" val="555444"/>
        <f name="Retrieval reference number" fieldNum="37" val="079563180779" valHex="303739353633313830373739"/>
        <f name="Approval Code" fieldNum="38" val="697BZN" valHex="363937425A4E"/>
        <f name="Action Code" fieldNum="39" val="00" valHex="3030"/>
        <f name="Card Acceptor Terminal Id" fieldNum="41" val="RU450099" valHex="5255343530303939"/>
        <f name="Card Acceptor Ident. Code" fieldNum="42" val="234234534      " valHex="323334323334353334202020202020"/>
        <f name="Proprietary Field 47" fieldNum="47" val="90800205919001395601100000000008" lenHex="0032" valHex="3930383030323035393139303031333935363031313030303030303030303038"/>
        <f name="Proprietary Field 48" fieldNum="48" val="819001z85601100000000008" lenHex="0024" valHex="3831393030317A3835363031313030303030303030303038"/>
        <f name="Currency Code, Transaction" fieldNum="49" val="643" valHex="0643"/>
        <f name="Currency Code, Cardholder Billing" fieldNum="51" val="643" valHex="0643"/>
        <f name="Smart Card Specific Data (EMV)" fieldNum="55" val="910A12073E49A98826FD3030711C861A84DA0000158003770C060000271000000190A534793E8E0B5CF6" lenHex="0042"/>
        <f name="Account Identification-1" fieldNum="102" val="FN_ACCOUNT_IDENT1" lenHex="17" valHex="464E5F4143434F554E545F4944454E5431"/>
        <f name="Account Identification-2" fieldNum="103" val="FN_ACCOUNT_IDENT2" lenHex="17" valHex="464E5F4143434F554E545F4944454E5432"/>
        <f name="Transaction Description" fieldNum="104" val="FN_TRANS_DESCRIPT" lenHex="17" valHex="464E5F5452414E535F4445534352495054"/>
        <f name="Proprietary Field 112" fieldNum="112" lenHex="000085">
            <f name="Local fleet data" tag="F0" tagHex="F0" lenHex="53">
                <f name="Protocol Version" tag="C1" val="4204" tagHex="C1" lenHex="02"/>
                <f name="Vehicle And Driver info" tag="E3" val="C11B54504F5254414C2020202020202020202020202020202020202020" tagHex="E3" lenHex="1D"/>
                <f name="POS Additional Info" tag="E4" val="81024401820513102800058306131028100454" tagHex="E4" lenHex="13"/>
                <f name="Commodity Info" tag="EA" tagHex="EA" lenHex="19">
                    <f name="Product" tag="FF01" tagHex="FF01" lenHex="16">
                        <f name="Commodity Code" tag="D1" val="T23" tagHex="D1" lenHex="03" valHex="543233"/>
                        <f name="Quantity" tag="D2" val="4204" tagHex="D2" lenHex="02"/>
                        <f name="Price" tag="D3" val="4202D5" tagHex="D3" lenHex="03"/>
                        <f name="Cost" tag="D5" val="4210" tagHex="D5" lenHex="02"/>
                        <f name="Additional Data" tag="D9" val="T1" tagHex="D9" lenHex="02" valHex="5431"/>
                    </f>
                </f>
            </f>
        </f>
    </f>
</f>

The 102 Field has the BCD length (one byte) and the ASCII body

<f type="LEN_VAL" fieldNum="102" name="Account Identification-1" lengthPacker="BcdLengthPacker" bodyPacker="AsciiBodyPacker"/>

The source code of the example can be found on GitHub.

Note: I'm the author of the iso-8583-packer library (Java) library.

Upvotes: 0

pred
pred

Reputation: 29

The data displayed and the rawmessage printed is not matching The rawmessage is not following the format of the packager defined. The problem could have occurred before field 102.

Inorder to debug manually u can check the bitmap positions and see of the positions are confirming to the spec.

Upvotes: 0

Related Questions