ISO8583Filter

使用ISO8583Filter处理ISO8583报文。使用时需要指定位图的大小为8或者16(单位:字节)。且需要指定定义好的模型。

1.组装ISO8583报文

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.brilliance.com.cn/interface" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.brilliance.com.cn/interface ../etc/schema/interface.xsd">
   <interface id="iso8583test" basePackage="com.brilliance.eibs.core.service.instance.impl" version="1" type="client">
       <transaction id="xxx"><!-- 发起交易 -->
           <step id="send">
               <filter ref="8583Filter" type="out">
                   <field tag="a" etag="1" value="aa" />
                   <field tag="b" etag="2" value="aa" />
                   <field tag="c" etag="3" value="aa" />
                   <field tag="d" etag="4" value="aa" />
               </filter>
           </step>
       </transaction>
   </interface>

   <modules>
       <module id="8583" type="iso8583">
           <field tag="account" etag="1" type="string" size="2" />
           <field tag="test2" etag="2" type="vrString" varsize="2" />
           <field tag="test1" etag="3" type="string" size="2" />
           <field tag="number" etag="4" type="string" size="2" />
       </module>
   </modules>
   <filters>
       <filter id="8583Filter" class="ISO8583Filter">
           <parameter name="bitmapsize" value="16" />
           <parameter name="moduleid" value="8583" />
       </filter>
   </filters>
</root>

2.解析ISO8583报文

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.brilliance.com.cn/interface" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.brilliance.com.cn/interface ../etc/schema/interface.xsd">
    <interface id="st" basePackage="com.brilliance.eibs.core.service.instance.impl" version="1" type="client">
        <transaction id="xxx"><!-- 发起交易 -->
            <step id="rec">
                <!-- 组装 -->
                <filter ref="8583Filter" type="out">
                    <field tag="a" etag="1" value="aa" />
                    <field tag="b" etag="2" value="aa" />
                    <field tag="c" etag="3" value="aa" />
                    <field tag="d" etag="4" value="aa" />
                </filter>
                <!-- 解析 -->
                <filter ref="8583Filter" type="in">
                    <field tag="a" etag="1" />
                    <field tag="b" etag="2" />
                    <field tag="c" etag="3" />
                    <field tag="d" etag="4" />
                </filter>
            </step>
        </transaction>
    </interface>

    <modules>
        <module id="8583" type="iso8583">
            <field tag="account" etag="1" type="string" size="2" />
            <field tag="test2" etag="2" type="vrString" varsize="2" />
            <field tag="test1" etag="3" type="string" size="2" />
            <field tag="number" etag="4" type="string" size="2" />
        </module>
    </modules>
    <filters>
        <filter id="publicFilter" class="PublicFilter" />
        <filter id="8583Filter" class="ISO8583Filter">
            <parameter name="bitmapsize" value="16" />
            <parameter name="moduleid" value="8583" />
        </filter>
    </filters>
</root>

3.ISO8583报文规范

3.1全称

ISO8583包(简称8583包)是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。

3.2位图

8583包前面一段为位图,用来确定包的字段域组成情况。 其中位图是8583包的灵魂,它是打包解包确定字段域的关键, 而了解每个字段域的属性则是填写数据的基础

3.3数据域

8583的报文总共有64个域,每个域都有各自不同的含义和作用,一些自定义域里面还可以分成其他数据域。

一条完整的8583报文格式可以看如下图所示:

img

简单的讲: 8583报文=tpdu(这个是固定的,报文接收放提供)+报文头+数据域 其中,位图包含在数据域当中,指明改数据域是由什么内容组成。 底下这段16机制的数据是位图元素: 702404C03CC09939 根据银联给我们的规定: 位图位置:1 域(在数据域的编号为1的域中) 格式:定长 类型:B16(二进制16位,16*8=128bit) 描述: 如将位图的第一位设为'1',表示使用扩展位图(128个域),否则表示只使用基本位图(64个域)。 如使用某数据域,应在位图中将相应的位设位'1',如使用41域,需将位图的41位设为'1'。 选用条件:如使用65到128域,需设位图域第一位为'1'

根据上面提示可以把位元素 转化如下 | 2 || 3 || 4 || 11 || 14 || 22 ||25 || 26 || 35 || 36 || 37 || 38 || 41 || 42 || 49 || 52 || 53 || 56 || 59 || 60 || 61 || 64 |

results matching ""

    No results matching ""