开发者社区> 小步2013> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

8583报文实例讲解

简介: 本篇文章参考了中国银联POS终端规范,所以如有不明白的可以去我的资源里面下载。     现在我们有ISO8583报文如下(十六进制表示法): 60 00 03 00 00 60 31 00 31 07 30 02 00 30 20 04 C0 20 C0 98 11 00 00 ...
+关注继续查看


本篇文章参考了中国银联POS终端规范,所以如有不明白的可以去我的资源里面下载。

 

 

现在我们有ISO8583报文如下(十六进制表示法):

60 00 03 00 00 60 31 00 31 07 30 02 00 30 20 04 C0 20 C0 98 11 00 00 00 00 00 00 00 00 01 00 03 49 02 10 00 12 30 62 25 82 21 12 99 63 01 5D 15 11 10 10 00 00 35 36 38 35 32 33 31 34 32 33 35 32 31 34 35 32 36 38 35 39 32 33 36 31 35 36 C6 24 83 4D 36 7E 9E 9E 20 00 00 00 00 00 00 00 00 13 22 00 00 08 00 05 00 36 37 41 32 32 39 39 41

 

 

第一步

POS终端上送POS中心的消息报文结构包括TPDU、报文头和应用数据三部分:

 TPDU:

      总长度为10个字节,压缩时用BCD码表示为5个字节长度的数值。

      ID:60H
      目的地址:00 06
      源地址:00 00
报文头:

      总长度为12字节,压缩时用BCD码表示为6个字节长度的数值。
      应用类别定义:N2
      软件版本号:N2
      终端状态:N1
     处理要求:N1
     保留使用:N6


      在POS上送的请求/通知报文中,该数值由POS终端应用程序在打包上送时根据POS终端参数和当前状态填入应用类别、软件版本号和终端状态,

      用于POSP根据数值进行相应的处理。在POSP返回的响应报文中,由POSP填入处理要求,其他域保持原值返回,POS将根据收到报文头中的处理要求进行相应处理。


报文头取值如下:
     ●应用类别定义:
          目前只定义
          磁条卡金融支付类应用为:60
          IC卡金融支付类应用为: 61
          磁条卡增值业务类支付为:62
          IC卡增值业务类支付为: 63

    ●软件版本号:01
    ●终端状态: 1
    ●处理要求:1
    ●保留使用:以备后用
 

应用数据说明:

一般长度都是4个字节,压缩时用BCD码表示为2个字节的长度的数值。

 

所以上述报文中前五个字节为TPDU,即60 00 03 00 00

报文头占用六个字节,即 60 31 00 31 07 30

应用数据占用2个字节,即 02 00 也就是"0200"


0200金融类请求消息:

●   POS查询请求。

●   POS消费请求。

●   POS消费撤销请求。

●   POS预授权完成(请求)请求。

●   POS预授权完成撤销请求。

●   电子现金脱机消费请求。

●   分期付款消费请求。

●   分期付款消费撤销请求。

●   基于PBOC电子钱包/电子现金的IC圈存类交易请求。

●   磁条卡现金充值请求。

第二步

分析位图:

首先取第十四个字节,即0x30 ,转化为二进制为0011 0000,在该字节的第一位为0(从左往右)表示当前报文中只需包括64个域,也就是从当前字节开始连续8个字节为位图(包括当前字节),如要包括128个域,该位为1。

现在进入关键的位图分析,现在我们取到了表示位图的8个字节即30 20 04 C0 20 C0 98 11,转为二进制为

00110000 00100000 00000100 11000000 00100000 11000000 10011000 00010001

位图中为1的位置即代表相应的域,在上面的二进制位中从左往右有第3位、第4位、第11位、第22位、第25位、第26位、第35位、第41位、第42位、第49位、第52位、第53位、第60位、第64位。

下面开始这些域中的数据,首先分析3域,3域为交易处理码,压缩成BCD码后占定长3个字节,我们从位图所占的8个字节后开始连续取3个字节,即 00 00 00,解压后即为“000000”,具体代表含义这里就不叙述了。

4域为交易金额,压缩成BCD码后占定长6个字节,同理取6个字节,即00 00 00 00 00 01,也就是金额0.01元,具体转换参考银联规范。

11域为受卡方系统跟踪号(流水号),压缩成BCD码占定长3个字节,同理取3个字节,即00 03 49,即000349。

22域为服务点输入方式码,压缩成BCD码占定长2个字节,同理取2个字节,即02 10,由于22域本身只占3个字节,压缩时左靠,右补0,所以转换为“021”,具体含义不再叙述。

25域为服务点条件码,压缩成BCD码占定长1个字节,同理取1个字节,即00,转换为“00”,“00”代表正常提交。

26域为服务点PIN获取码,压缩成BCD码占定长1个字节,同理取1个字节,即12,转换为“12”,表示服务点设备所允许输入的个人密码明文的最大长度为12。

解下来的35域由于不是定长,所以处理方法不同,先取一个字节,即30,转换为“30”,表示第二磁道的数据占用30个字节,取连续15个字节即62 25 82 21 12 99 63 01 5D 15 11 10 10 00 00,这里不对这串数据进行说明了。

41域为受卡机终端标识码,占8个字节的定长域,取35 36 38 35 32 33 31 34。

42域为受卡方标识码,占15个字节的定长域,取32 33 35 32 31 34 35 32 36 38 35 39 32 33 36。

49域为交易货币代码,占3个字节的定长域,取31 35 36。

52域为个人标识码数据,占8个字节的定长二进制数域,取C6 24 83 4D 36 7E 9E 9E。

53域为安全控制信息,压缩成BCD码占8个字节定长域,取20 00 00 00 00 00 00 00。

60域为自定义域,为不定长域,先取长度(压缩成BCD码占两个字节),即00 13,转换为13即占60域占13个字节,压缩成BCD码占7个字节,取22 00 00 08 00 05 00。

64域为报文鉴别码,占定长8个字节,取最后八个字节36 37 41 32 32 39 39 41。

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
recvfrom获取对端地址
recvfrom获取对端地址
0 0
多播报文的发送和接收
1       实验目的 掌握多播的原理及如何进行多播报文的发送和接受 2       注意事项 需包括 ws2tcpip.h 文件 发送者和所有接受者在同一网内 不考虑 TTL 值,回环状态 通过 se...
804 0
通过UDP的组播方式收发数据
客户端代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.
699 0
UDP广播的方式收发数据(C#)
发送数据: /// /// 发送信息 /// /// /// private void button1_Click(object sender, EventArgs e) ...
650 0
+关注
小步2013
java,架构,安全相关方向
文章
问答
文章排行榜
最热
最新
相关电子书
更多
探索连接的最后十秒”落时”的网关
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载