ISO8583报文协议包解析(Pos机常用报文通讯协议)

ISO8583是国际标准包格式的通讯协议,最多由128个字段域组成,每个字段域都有统一的规定,常用语我们Pos机的通信中使用。

报文组成:

报文头【长度(2字节)+TPDU(5字节)+报文版本号(2字节)】+ 信息类型 + 位图 + 数据
TPDU(TPDU决定了终端与系统之间的网络协议): 6000100000
报文版本号:0100
信息类型:0080 
报文长度:整体报文长度 -报文头中的2字节长度。如8583整体报文长度为100,那么报文长度为98.用两字节的BCD码表示(16进制)为0062。

报文中容易出错的在于银联规范中的各种数据格式,定长、变长、ASCII变长、以及TLV格式等。在组包或者解包前,仔细看规范是十分重要的。

以下主要是针对各个域单独组包和多个域组包的情况举例。

报文域

域序号           域名称:中文

–                                     扩展的位元表
2                                    主账号
3                                    交易处理码
4                                    交易金额
5                                    清算金额
6                                    持卡人扣账金额
7                                    交易传输时间
9                                    清算汇率
10                                  持卡人扣账汇率
11                                  系统跟踪号
12                                   受卡方所在地时间
13                                    受卡方所在地日期
14                                    卡有效期
15                                    清算日期
16                                    兑换日期
18                                   商户类型
19                                    受理机构国家代码
22                                    服务点输入方式码
23                                    卡序列号
25                                    服务点条件码
26                                    服务点PIN获取码
28                                    交易费
32                                    受理机构标识码
33                                    发送机构标识码
35                                   第二磁道数据
36                                   第三磁道数据
37                                    检索参考号
38                                    授权标识应答码
39                                    应答码
41                                    受卡机终端标识码
42                                    受卡方标识码
43                                  受卡方名称地址
44                                   附加响应数据
45                                    第一磁道数据
48                                  附加数据——私有
49                                    交易货币代码
50                                    清算货币代码
51                                    持卡人账户货币代码
52                                个人标识码数据
53                                安全控制信息
54                                实际余额
55                                IC卡数据域
57                                附加交易信息
58                               IC(PBOC)卡交易数据
59                               明细查询数据(暂不启用)
60                              自定义域
61                                持卡人身份认证信息
62                               通联数据
63                               金融网络数据
66                               清算代码
70                               网络管理信息码
74                               贷记交易笔数
75                               冲正贷记笔数
76                              借记交易笔数
77                               冲正借记笔数
78                               转账笔数
79                               冲正转账笔数
80                               查询笔数
81                              授权笔数
82                               贷记服务费金额
84                               借记服务费金额
86                               贷记交易金额
87                               冲正贷记金额
88                               借记交易金额
89                               冲正借记金额
90                               原始数据元
95                               替换金额
96                               报文安全码
97                               净清算额
99                              清算机构代码
100                             接收机构标识码
102                               账户标识1
103                               账户标识2
121                               通联保留
122                               受理方保留
123                               发卡方保留
128                               报文鉴别码
130                               终端能力
131                               终端验证结果
132                               随机数
133                               接口设备序列号
134                               卡片数据
135                               发卡方应用数据
136                               应用密文
137                               应用交易计数
138                               应用交换配置码
139                               授权响应密文及响应代码
142                               发卡方脚本
143                               发卡方脚本结果
144                               加密时使用的交易类型
145                               终端国家代码
146                               终端交易日期
147                               加密时使用的交易金额
148                               加密时使用的货币代码
149                               加密时使用的返还现金金额
161                               终端类型
162                               附加终端能力
164                               卡片认证结果代码
192                              报文鉴别码

未使用的报文域

域序号                       域名称:中文

8                                    持卡人签单费金额
17                                    受理日期
20                                    扩展主账号国家代码
21                                    发送机构国家代码
24                                    网络国际标识符
27                                    授权标识响应长度
29                                    清算费
30                                    交易处理费金额
31                                    清算处理费
34                                    扩展主账号
40                                  服务限制代码
46                                    附加数据-JSO
47                                    附加数据-国家
55                                    保留给ISO使用
56                                    保留给ISO使用
64                                  报文鉴别代码字段
67                                    清算代码
68                                    接收机构国家代码
69                                  清算机构国家代码
71                                   报文编号
72                                    后报文编号
83                                   贷记交易费金额
85                                    借记交易费金额
91                                    文件更新码
92                                    文件保密代码
93                                    响应指示符
94                                    服务指示符
98                                    收款人
104                                    交易描述
105~120                          保留使用
124~126                          保留使用
129                                    保留使用
140~141                          保留使用
150~160                         保留使用
165~191                         保留使用

域描述

单信息交易报文
0100/0110                授权类请求/应答报文

                      预授权请求/应答

                      追加预授权请求/应答报文

                      预授权撤销(联机、手工)请求/应答

                      基于PBOC电子钱包/存折标准的IC卡圈提请求/应答

                      建立委托关系请求/应答报文

                      撤销委托关系请求/应答报文

0200/0210               金融类请求/应答报文

                      余额查询请求/应答

                      取现请求/应答

                      存款请求/应答

                      存款撤销请求/应答

                      预授权完成(联机)请求/应答

                      预授权完成撤销请求/应答

                      消费请求/应答

                      消费撤销请求/应答

                      转账请求/应答

                      转入转账请求/应答

                      转出转账请求/应答

                      基于PBOC电子钱包/存折标准的IC卡圈存交易请求/应答

                      代收请求/应答

0220/0230             金融通知/应答类报文

                      存款确认通知/应答

                      转入确认通知/应答

                      预授权完成(离线)通知/应答

                      结算通知/应答

                      联机退货通知/应答

                      消费、消费撤销交易的代授权通知/应答

                      取现交易的代授权通知/应答

                      预授权完成、预授权完成撤销的代授权通知/应答

0120/0130              预授权、预授权撤销的代授权通知/应答

0420/0430            冲正类通知/应答报文

                      预授权冲正通知/应答

                      预授权撤销(联机、手工)冲正通知/应答

                      取现冲正通知/应答

                      消费冲正通知/应答

                      消费撤销冲正通知/应答

                      预授权完成冲正通知/应答

                      预授权完成撤销冲正通知/应答

                      转出转账冲正通知/应答

                      代收冲正通知/应答

                      代付冲正通知/应答

                      代付撤销冲正通知/应答

                      消费、取现、预授权冲正交易的代授权通知/应答

其它报文

0220/0230                     收付费通知/应答报文

0520/0530                     受理方对账类通知/应答报文

0522/0532                     发卡方对账类通知/应答报文

0520/0530                     入网机构转账类交易对账通知/应答报文

0620/0630                     管理类通知/应答报文

                      文字信息传送通知/应答

                      资金结算通知/应答

                      涉嫌卡交易通知/应答

                      涉嫌卡通知/应答

0800/0810                     网络管理类请求/应答报文

                      重置密钥请求/应答

0820/0830                    网络管理类通知/应答报文

                      发送网络管理通知/应答

                      入网机构发送网络管理通知/应答

                      入网机构申请重置密钥通知/应答

0800/0810                     代授权通知信息索取

                      代授权通知信息终止索取

多域组包

手动组装的8583报文:

0072600010000001000800203801000404000880000000000110101112240009303030313531000800350004343136310009303030303031303031

分析组包过程:

0072(长度)

6000100000(TPDU)

0100(版本号)

0800(信息类型)

2038010004040008(64位图-表示报文中存在哪些域–16进制变成二进制,按有1的顺序得知为存在域)【00100000 00111000 00000001 00000000 000000100 000000100 00000000 00001000:根据有64位二进制码中1的顺序得知:第一个1的index为:3,第二1的index个为:11……按照1的顺序依次得知域信息,后面的取值也是根据顺序来】

800000(3域)

000001(11域)

101011(12域)

1224(13域)

0009(24域)

303030313531(38域)

00080035000434313631(46域)

0009303030303031303031(61域)

按顺序拼接起来即可。

详细的分析,在单独域组包中可以看到。

单独域组包

2域单独组包:

格式:变长,LLVAR

类型:N..19,压缩时使用1字节BCD表示的长度 + 用右靠BCD码表示最大10个字节的变长域。

二进制:0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):4000000000000000

2域内容:6333021402021781,按规范转为:166333021402021781

计算报文长度:0034

组装8583报文:00346000100000010000804000000000000000166333021402021781

3域单独组包:

格式:定长

类型:N6,压缩时用BCD码表示的3个字节的定长域。

二进制:0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):2000000000000000

3域内容:800000 ,按规范转为:800000

报文长度:0028

组装8583报文:00286000100000010000802000000000000000800000

4域单独组包:

格式:定长

类型:N12,压缩时用BCD码表示的6个字节的定长域。

二进制:0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):1000000000000000

4域内容:1.01,按规范转为:000000000101

报文长度:002E

组装8583报文:002E6000100000010000801000000000000000000000000101

7域单独组包:

n10,10位定长数字字符

格式:MMDDhhmmss

二进制:0000 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0200000000000000

7域内容:0228102030,按规范转为:0228102030

报文长度:002C

组装8583报文:002C60001000000100008002000000000000000228102030

11域单独组包:

格式:定长

类型:N6,压缩时用BCD码表示的3个字节的定长域。

二进制:0000 0000 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0020000000000000

11域内容:000001,按规范转为:000001

报文长度:0028

组装8583报文:00286000100000010000800020000000000000000001

12域单独组包:

格式:定长,HHmmss

类型:N6,压缩时用BCD码表示的3个字节的定长域

二进制:0000 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0010000000000000

12域内容:203012,按规范转为:203012

报文长度:0028

组装8583报文:00286000100000010000800010000000000000203012

13域单独组包:

格式:定长,MMDD

类型:N4,压缩时用BCD码表示的2个字节的定长域。

描述:交易在终端上发生的时间。

二进制:0000 0000 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0008000000000000

13域内容:0430,按规范转为:0430

报文长度:0024

组装8583报文:002460001000000100008000080000000000000430

14域单独组包:

格式:定长,MMYY

类型:N4,压缩时用BCD码表示的2个字节的定长域。

描述:卡的有效期,月月年年

二进制:0000 0000 0000 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0004000000000000

14域内容:0415,按规范转为:0415

报文长度:0024

组装8583报文:002460001000000100008000040000000000000415

15域单独组包:

格式:定长, MMDD

类型:N4,压缩时用BCD码表示的2个字节的定长域。

描述:清算日期(Date Of Settlement),月月日日

二进制:0000 0000 0000 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0002000000000000

15域内容:1229,按规范转为:1229

报文长度:0024

组装8583报文:002460001000000100008000020000000000001229

32域单独组包:

格式:变长,LLNUM

类型:N..11,压缩时使用1字节BCD表示的长度 + 用右靠BCD码表示最大11个字节的变长域。

描述:受理机构标识码。该代理机构应是已被批准入网,能为商户提供收单服务的入网机构。

二进制:0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0000000100000000

32域内容:2001,按规范转为:042001

报文长度:0028

组装8583报文:00286000100000010000800000000100000000042001

34域单独组包:

格式:变长,LLVAR

类型:N..28,1个字节BCD长度值 + 最大28个字节的变长ASCII。

描述:扩展主账号信息域

二进制:0000 0000 0000 0000 0000 0000 0000 0000 0100 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0000000040000000

34域内容:198809,按规范转为:06313938383039

报文长度:0030

组装8583报文:0030600010000001000080000000004000000006313938383039

35域单组组包:

格式:变长,LLVAR

类型:Z..48(加密后),1个字节BCD长度值 + 用右靠BCD码表示的最大24个字节的第二磁道数据。

描述:写在卡二磁道的数据。

二进制:0000 0000 0000 0000 0000 0000 0000 0000 0010 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0000000020000000

35域内容:EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19,按规范转为:24EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19

报文长度:0054

组装8583报文:0054600010000001000080000000002000000024EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19

36域单独组包:

格式:变长,LLLVAR

类型:Z…112(加密后),2个字节BCD长度值 + 用右靠BCD码表示的最大56个字节的第三磁道数据。

描述:写在卡三磁道的数据。

二进制:0000 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0000000010000000

36域内容:EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19,按规范转为:0024EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19

报文长度:0056

组装8583报文:005660001000000100008000000000100000000024EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19

37域单独组包:

格式:定长

类型:AN12,12个字节的定长ASCII。

二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 1000 0000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0000000008000000

37域内容:11112233,按规范转为:303030303131313132323333

报文长度:003A

组装8583报文:003A6000100000010000800000000008000000303030303131313132323333

41域单独组包:

格式:定长

类型:N8,8个字节的定长ASCII

描述:定义在收单单位中定义一个服务终端的标识码

二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1000 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0000000000800000

41域内容:12345678,按规范转为:3132333435363738

报文长度:0032

组装8583报文:003260001000000100008000000000008000003132333435363738

42域单独组包:

格式:定长

类型:ANS15,15个字节的定长ASCII

描述:在本地和网络中定义交易单位(商户)的编码

二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0000 0000 0000 0000 0000

十六进制(BCD码>1001加6):0000000000400000

41域内容:821024512345678,按规范转为:383231303234353132333435363738

报文长度:0040

组装8583报文:00406000100000010000800000000000400000383231303234353132333435363738

46域单独组包:

格式:变长,LLLVAR

类型:ANS..255,2个字节BCD长度值 + 最大128个字节的ASCII。

描述:该域用于处理TLV数据

二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0000 0000 0000 0000

十六进制(BCD码>1001加6):0000000000040000

46域内容:0000#trans_type#99,按规范转为:0006000000023939

报文长度:0032

组装8583报文:003260001000000100008000000000000400000006000000023939

52域单独组包:

格式:定长

类型:B64,8个字节的定长二进制数

描述:用户在服务终端上交易用于识别用户合法性的一些数字

二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000

十六进制(BCD码>1001加6):0000000000001000

52域内容:5EF0F6C66C3ED34E,按规范转为:5EF0F6C66C3ED34E

报文长度:0032

组装8583报文:003260001000000100008000000000000010005EF0F6C66C3ED34E

55域单独组包:

格式:变长,LLLVAR

类型:ANS..255, 2个字节BCD长度值 + 最大128个字节的BCD数据

描述:本域为IC卡交易使用

二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 0000 0000

十六进制(BCD码>1001加6):0000000000000200

52域内容:9F260879CC8EC5A09FB9479F2701809F100807010199A0B806019F3704000000009F360201C2950500001800009A031205089C01609F02060000000000005F2A02015682027D009F1A0201569F03060000000000009F3303E0F0F09F34036003029F3501119F1E0832303033313233318405FFFFFFFFFF9F090220069F4104000000019F74064543433030319F631030313032303030308030303030303030,按规范转为:03189F260879CC8EC5A09FB9479F2701809F100807010199A0B806019F3704000000009F360201C2950500001800009A031205089C01609F02060000000000005F2A02015682027D009F1A0201569F03060000000000009F3303E0F0F09F34036003029F3501119F1E0832303033313233318405FFFFFFFFFF9F090220069F4104000000019F74064543433030319F631030313032303030308030303030303030

报文长度:0164

组装8583报文:0164600010000001000080000000000000020001599F260879CC8EC5A09FB9479F2701809F100807010199A0B806019F3704000000009F360201C2950500001800009A031205089C01609F02060000000000005F2A02015682027D009F1A0201569F03060000000000009F3303E0F0F09F34036003029F3501119F1E0832303033313233318405FFFFFFFFFF9F090220069F4104000000019F74064543433030319F631030313032303030308030303030303030

61域单独组包:

bitmap(64位图):

二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1000

十六进制(BCD码>1001加6):0000000000000008

61域内容:  000001001,按规范转换为:0009303030303031303031

计算报文长度:0038

组装8583报文:003860001000000100008000000000000000080009303030303031303031