1 8583报文数据类型
整个报文内容包括:报文长度+TPDU+报文头+交易数据。上一章解释了报文长度、TPDU和报文头信息。这里我们详细说下交易数据部分。在这之前需要简单介绍下报文中的数据类
举个例子:变量a类型是N4,那么表示a是最多4个有效数字填充,如果内容不够4位,那么用0左边填充。如a=’\0x01’,那么实际上填充的内容是:“\0x00 \0x00 \0x00 \0x01”(这里抛开BCD先)。
2 8583消息类型
消息类型是在银联规范中已经规定给你,表示该报文的交易类型,通俗说就是“你是干啥的”。比如0800表示签到,0200表示消费。
N4, 4个字节的定长数字字符域。压缩时用BCD码表示的2个字节的定长域。十六进制即:0x08 0x00。关于BCD上一章简单介绍过,后面会开一张专门介绍下并附带算法。
3 8583位图
位图在整个报文中占8个字节,位图的作用就是分析出来该报文有那些域参与。网上有专门的位图解析工具。原理比较简单,8个字节就是8*8=64个bit位,也就是代表64个域。如果哪个bit位为1,则表示该报文中该域是存在数据的,否则表示该域为空。还是拿签单报文举例:
位图是00 20 00 00 00 C0 00 12。用位图工具可以看到域信息是:11 41 42 60 63。
4 域解析
那么就看位图以后的数据:00 12 47 35 38 44 30 31 31 31 35 38 38 37 35 38 44 30 34 38 31 36 35 35 35 35 00 11 00 00 00 01 00 30 00 02 30 31。
我们先去银联规范中查看11域介绍:
看图,上面已经表明占3个字节,那么11域内容是:00 12 47。剩下的数据是:35 38 44 30 31 31 31 35 38 38 37 35 38 44 30 34 38 31 36 35 35 35 35 00 11 00 00 00 01 00 30 00 02 30 31。那么再看下41域定义:
占8个字节,那么从剩下的报文内容中拿取8位:35 38 44 30 31 31 31 35 38。依次42域:38 38 37 35 38 44 30 34 38 31 36 35 35 35 35。剩余的数据是:00 11 00 00 00 01 00 30 00 02 30 31。看60域定义:
2个字节表示长度:00 11,这里是BCD之前的长度信息,那么如果BCD后则是(11+1)/2=6,所以数6个字节:00 11 00 00 00 01 00 30。63域一样。