SOP通讯格式规则
1. 概述
通讯数据包由公共信息部分、交易数据部分
公共信息部分包括系统信息头和交易公共信息头。
交易数据部分包括交易数据头(可选)、业务数据和系统控制命令。
业务数据部分又包括数据单元、表格和对象。业务数据部分可以插入系统控制命令。
系统信息头
部分是与系统相关的,包括目标服务代码、数据源代码、长度等系统信息,由系统配置文件(数据库表,下同)指定,每字段的个数、顺序、长度固定。
交易公共信息头
部分是跟同一数据包中所包含的所有交易相关的信息,包括交易的终端,交易柜员,机构等信
息,组织方式同系统信息头的格式。
交易数据头
部分包括交易代码,交易模式,前台流水号,授权柜员等信息,组织方式同系统信息头的格式。
业务数据部分
由长度+数据组成,长度用一个字节的二进制数表示,数据全部转换成字符串传送,字符串的最大长度由系统的BYTE_MAX_LEN宏定义指定(在本系统里,我们定义BYTE_MAX_LEN 为250(0xFA)),大于该长度的部分系统保留作为控制命令用。如果数据单元的长度超过BYTE_MAX_LEN,则分段发送,0xFF作为超长数据的标志。例如要传768字节数据,由于系统定义BYTE_MAX_LEN为250,则该数据段为0xFF+250字符+0xFF+250字符+0xFF+250字符+0x12+18字符;如要传250字节数据时,则该数据段为0xFA+250字符。
控制命令部分。在业务数据中,可以穿插控制命令,其格式为:控制字符标志+控制字符串
长度+控制字符串。控制字符标志由系统保留的BYTE_MAX_LEN~0xFF之间的字符标识,在本系统中系统保留字符为0xFB,0xFC,0xFD,0xFE,目前仅使用0XFE作为打印相关的控制命令标识符。
整个通讯数据包的组成示意图如下:
公共信息 | 交易数据 | |||||||
交易头 | 业务数据 | |||||||
系统信息头 | 交易公共信息头 | 交易数据头 | 交易时间字符串是什么 数据单元 | 数据单元 | 数据单元 | 表格 单元 | 对象 单元 | 。。。 |
控制命令码可以穿插在业务数据之间,如单元与单元之间,表格内部数据项之间,以及对象内数据项之间 | ||||||||
下面将分几个部分详细描述整个系统的通讯格式。
2. 单元定义
数据单元(TRANFLD)
数据单元TRANFLD是COP和SOP中代表特定内容的基本数据项,一般对应一个应用数据定义,在SOP平台中采用可自解包的通讯格式。数据单元通讯格式如下:
可选 | 机构名 | 可选 | 金额 | 可选 | 266字节数据 | 。。。 | ||||||
属性 | 0X5 | “A网点” | 属性 | 0X6 | “123.45” | 属性 | 0xFF | 250字节 | 0X10 | 16字节 | ||
每一个数据单元在通讯格式中用两个部分表示——长度+内容。内容部分都以字符串方式传输,截掉前导和后续的空格,以减少冗余数据的传输。长度以一个字节的16进制数表示,可表示的最大长度为250(0XFA)字节,若数据单元长度超过250字节,则采用分解传送的方式,以0XFF表示数据单元超长,如上图中266字节数据单元。
长度定义中0XFB~0xFE保留,作为控制命令使用,见控制命令描述。
属性是可选项,可以包括多种属性,目前仅支持打印属性。对于一般数据单元不需要定义,对于其它对象一般需要定义相应属性。
打印属性定义格式如下:
打印行 | 打印列 | 打印模式 |
Y | X | 0,1,2... |
本系统中,要求Y<=250 && X<=250。
打印模式的具体含义见打印模式定义。
表格单元(FORM)
表格单元FORM是指COP和SOP平台中由格式相同的多条记录组成的复合数据单元,其中每一条记录的数据又由多个数据单元组成。表格在通讯格式中以表格名+记录条数+多条记录数据组成,每一条记录又由多个数据单元(表示方法同数据单元)表示。
表格单元的通讯格式如下:
表格名 | 记录条数 | 栏位个数 | 可选项 | 记录01 | 记录02 | |||||||||||
0X3 | “F01” | 0X2 | 0X3 | 打印属性或其它 | 0X3 | “ABC” | 0X2 | 借 | 0x7 | “1234.99” | 0X4 | “李明” | 0X2 | 贷 | 0x5 | “20.00” |
表格名长度 | 表格名称 | 见下表 | 姓名项 | 借贷标志项 | 金额项 | 姓名项 | 借贷标志项 | 金额项 | ||||||||
属性是可选项,在一般数据单元的定义中不使用。
在本系统中,记录条数不得大于250个。如果记录条数可能大于250条,必须采用文件传输的方式解决这一问题。
表格的打印属性定义如下:
起始行号 | 打印列1 | 模式1 | 打印列2 | 模式2 | 。。。 | 打印列n | 模式n |
Y | X1 | M1 | X2 | M2 | Xn | Mn | |
模式M1~Mn为数字代码,含义同数据单元中的说明。
其它属性定义可以根据扩展对象的属性进行定义。
对象单元
COP/SOP的对象代表一个具有特定属性的复合数据单元,是COP/SOP系统实现后台驱动前台的基础。对象描述中必须包括对象名,其它属性如字段排列顺序等可在外部静态定义。对象的组成元素可以包括数据单元和表格单元等系统支持的各类单元。
在COP/SOP系统中,对象的类型可以根据需求进行扩展和定义,目前支持的对象类型包括窗口对象、打印对象等。
对象一般由对象名+数据单元(可选项)+表格单元(可选项)组成。一个包含数据单元和表格单元的窗口对象的通讯格式如下:
对象名 | 对象内容 | ||||||
0X5 | “OBJ01” | 数据单元 | 数据单元 | 。。。 | 表格单元01 | 数据单元 | 。。。 |
窗口对象的对象内容中不包含数据单元和表格单元的可选属性,如行、列、模式等信息。
打印对象由对象名+[打印属性+数据单元](可选项)+[表格名称+记录条数+栏位数+打印属性+格数据](可选项)+打印控制命令码(可选项)组成。打印控制命令码见打印控制命令码介绍。
控制命令码
控制命令码可以穿插在数据单元之间,也可以穿插在表格单元的数据项之间。COP/SOP系统中保留了0XFB~0XFE之间的取值作为控制命令标志用。目前仅使用控制命令标志0XFE,作为打印控制命令码传输标志。
控制命令标志 | 控制命令长度 | N位控制序列 |
0XFE | 0xN | 0x14。。。 |
在这里有一个换页打印的问题,本系统定义了0xFE为系统控制命令标志,换页符为0x0c
换行0x0a。因此,如果需要换页打印,该换页控制命令串为0xFE+0x01+0x14;该串可以置于打印对象的数据单元或表格单元之前(如0xFE+0x01+0x14+TRANFLD或FORM),也可以置于FORM数据中某一条记录之前(如FORM的第n-1条记录+0xFE+0x01+0x14+FORM的第n条记录),其它地方一概予以忽略。
3. 输入信息格式
输入/输出是相对后台主机而言的。输入信息是指客户端发向后台主机的信息。输入信息包由系统信息头、交易公共头、交易数据头、业务数据组成。
其中系统信息头、交易公共头和交易数据头采用结构化的数据格式;业务数据采用长度加字符串的传输方式,在本系统中,除二进制数据外,其他数据都转换成字符串类型进行传输。
输入信息包的格式如下:
公共信息 | 交易数据1 | 交易数据2 | 。。。 | ||||||||
系统信息头 | 交易公共头 | 交易 数据 头 | 数据 单元 | 数据 单元 | 表格 单元 | 。。。 | 交易 数据 头 | 数据 单元 | 数据 单元 | 。。。 | |
输入信息格式中不允许存在对象单元和控制命令码,业务数据由数据单元和表格单元组成。数据单元和表格单元的传输格式见单元定义。
下面将介绍系统信息头、交易公共头、交易数据头三个部分的数据格式。
系统信息头
系统信息头的格式如下:(55bytes) 报文头总长140B
{
数据包长度 (SHJBCD) unsigned short 2B //转换成网络格式
报文MAC (BAWMAC) char(16)
MAC机构号 MACJGH char(4) //表示报文中MAC的对方机构号
PIN种子 PINZHZ char(16) //表示报文中PIN的种子(随机数参与加密)
目标地址 (YNDIZH) unsigned char(4) //二进制方式存储
源地址 (MBIODZ) unsigned char(4) //二进制方式存储
系统保留位 (BOLIUW) unsigned char(1) //二进制方式存储
信息结束标志(XXJSBZ) unsigned char(1) //二进制方式存储
报文序号 (SJBSXH) unsigned short 2B //转换成网络格式
校验标志 (JIOYBZ) unsigned char(1) //二进制方式存储
密钥版本号 (MIYBBH) integer 4B
}
字段说明
信息长度:表示整个数据包的长度,包括本数据项所占用的字节数。
目标地址:目标服务器的地址,以代码表示,包含目标服务器,服务端口等信息。具体表示方法见附录。
源地址:交易发起端地址,以代码表示,包含源设备,服务端口等信息。具体表示方法见附录。
系统保留位:暂不使用。默认设置为0
信息结束标志:为适应多包数据通讯保留,默认设置为1
报文序号:为了防止报文恶意重发设置,暂不使用,默认值为0
校验标志:是否需要MAC或其它校验, 暂不使用;
报文MAC: 校验算法生成的数据项
交易公共头
公共交易头格式如下:(21bytes)
{
终端号 ZHNGDH char(5) String //字符串方式存储
城市代码 CHSHDM char(4) String
机构代码 YNGYJG char(4) String
交易柜员 JIO1GY char(8) String
}
字段说明
终端号:交易发起端终端号,省略TTY,如21a表示终端tty21a。
城市代码:暂不使用,设置为空格
机构代码:银行机构代码。
交易柜员:交易柜员代码。
交易数据头
交易数据头格式如下:( 64bytes)
{
交易代码 JIAOYM char(4) //String
交易子码 JIOYZM char(2) //String
交易模式 JIOYMS char(1) //String
交易序号 JIOYXH int 4B //int (pjyjk: N 4)
本交易包长度COMMLN unsigned short 2B (pjyjk:n 2)//
系统偏移1 PNYIL1 unsigned short 2B //0xFFFF为无效
系统偏移2 PNYIL2 unsigned short 2B //0xFFFF为无效
前台流水号 QANTLS char(12)
前台日期 QANTRQ char(8)
授权柜员 SHOQGY char(8) //String
授权密码 SHOQMM char(16) //String
授权柜员有无卡标志 YWKABZ char(1)
授权柜员卡序号 CZYNXH char(2)
}
字段说明
交易子码: 判断某个复合交易中的子交易码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论