您的位置:首页 > 其它

中国联通计费侧H2协议接口实现

2016-03-14 15:19 821 查看
业务需求,前几天写了一个跟联通计费侧的接口,具体要求参见局方规范:

1       H2协议

遵循软件工程及制定协议标准的基本思想,本着接口易用、易理解、易交流的原则,为实现客服系统的规范性、开放性、扩展性、业务独立性提供保证。

总部H2接口方式

采用事务交易设计,以保证传输数据的安全正确。

采用中间件技术,使接口定义简单明晰。

根据交易的类型,决定交易回应的时限。

 

包头定义:
包头格式:内容为一定长ASCII字符串(86位),具体内容如下:

字段名称

长度

说明

A0版本号信息

(2位)

标识当前使用的协议版本号

A1数据包大小

(5位)

以字节为单位,不足右补空格

A2流水号

(20位)

业务流水号,标志每笔具体交易。数据校验包可以无流水号

A3标志

(1位)

1表示成功 0表示失败,仅适用于响应包

A4服务类型

(12位)

编码规则参见《》

A5业务号码

(20位)

移动电话号码

A6业务号码类型

(1位)

1电话号码;2帐号;3其他

A7营业点

(6位)

业务受理地点

A8营业员

(8位)

业务受理人

A9包编号

(5位)

标志该笔流水的第几包数据

A10最后一包标志

(1位)

在进行多包发送的情况下,该标志用以标明是否为最后一数据包。1最后一包数据,无后续包;0非最后一包数据,有后续包,连接错误,I/O错误等

A11错误码

(5位)

在标志为失败时需要检查该错误码。错误码包括系统操作错误和业务处理错误

 

包体定义:
一个数据包总长度不可大于4K。对存在多条返回记录的业务,一数据包可含多条记录。长度如超过4K,就以多包数据发送。每字段之间用“TAB键0x09”分隔,每记录之间用“回车键0x0d,0x0a”分隔,包结束用“0x1a”。对于不同的服务类型,其请求包和应答包的包体具有不同的内容。无论数据有无包体返回,一定需要添加包结束符。对于任何非正常返回的数据包应该没有包体,只有包头与包结束符。包体字段为定长字符串,非变长字符串,字段内容不应该出现不可打印字符串。

补空格原则
凡字段的数据表示的是金额的,既其字段类型是Number(10)的,这样的字段是左补空格,其它字段都是右补空格。注:如果省分是按分隔符处理数据,此规则无效。如果省分按定长处理数据,则遵循些规则补空格。

接口采用严格的数据长度确认传输数据正确性!其间采用的Socket编程没有什么说的,主要是在开发中遇到以下问题:

1.数据包头+包体构成,请求数据不能没有包头,可以无包体

2.包头必须采用86位长度,不能长,不能短

3.服务端解析报文必须先读取报文结束标志,否则,不解析,Socket一直处于read模式,导致客户端超时

4.文档说的包以0x1a结束,正确的无包体报文的长度为87位,即结束位长度为1,如果根据文档描述的,报文长度为90,进入报文解析直接报错,不解析!

如果全部转化为16进制,长度完全超出要求。

最后,根据十六进制计算该结束标志为SUB(ASCII),通过将该SUB加上前面报文正常解析.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息