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报文格式可以看如下图所示:
简单的讲: 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 |