基于ISO8583协议服务端与POS机数据交互
来源:互联网 发布:mac装win10设置电源 编辑:程序博客网 时间:2024/05/17 22:56
最近公司项目涉及到充值卡消费,要求服务端与终端应用通过ISO8583协议进行通信,写点东西供有需要的同学们参考。
大概了解了下需求,不是很复杂,包括签到、刷卡消费、撤销、余额查询等接口。网上看了下java通信相关的框架,比较突出的有mina、netty,mina的资料比较多些,而且和spring整合比较方便,最终选择的mina作为底层通信框架。
关于电子交易框架,查了些资料,涉及到了jPOS系统,j8583包等。看了下jPOS,比较庞大,成型的电子交易缴费系统,小项目和它整合起来有点麻烦,也没有必要。再看了下j8583包,项目比较简洁,项目地址:http://j8583.sourceforge.net/
常用的方法,消息工厂类基本提供了,比如消息的解析、创建、消息头的处理,以及协议中支持的多种数据类型转换等等。不过,在测试使用过程中发现一些问题,如:二进制数据的编解码、不支持中文编码、变长字段长度算法不对等等,针对这些问题,对源码进行了修改,基本上满足项目要求了。下面就大概介绍下如何结合使用:
1、开发环境
数据库方面,考虑项目面向一个商业区,数据量不是很大,采用mysql5.5 ,版本还算稳定。(安装的时候注意几个关键字 :编码、innodb、大小写忽略)
采用mybatis框架作为数据库访问层
当然少不了spring,不解释
分层架构,多工程自动部署,采用maven自动构建发布(网上找不到含j8583的仓库,需要自己上传私服)
开发工具 eclipse4.2 kepler,预装了svn、maven等插件,jdk1.6
2、工程搭建
使用maven 命令行 创建所需工程(略),并添加相关依赖,spring、mina、j8583、本地工程等
主程序入口:
spring配置如下,即spring启动上下文自动启动mina并绑定端口监听
自定义消息处理相关配置:
消息处理器
消息处理器ISOMessageHandler 继承了mina提供的IoHandlerAdapter类,自行实现以下方法
sessionOpened(IoSession session)
messageReceived(IoSession session, Object message)
sessionClosed(IoSession session)
exceptionCaught(IoSession session, Throwable cause)
注意messageReceived方法,session为当前会话session对象,message为经过自定义解码器解码后所得对象,由于使用到j8583包完成协议封装,框架内传递的对象为IsoMessage对象,进一步封装成Message,添加tpdu头、大小属性,如下:
所以,使用message时直接强转成Message对象即可。
messageReceived方法中实现调用业务处理类处理
自定义消息编码解码器
编码器用于将Message对象转换成协议报文,自定义消息编码器用于将终端传送过来的请求报文解析成Message对象。如下实现:
ISO8583Decoder 继承 CumulativeProtocolDecoder 自行实现boolean doDecode(IoSession session, IoBuffer in,
ProtocolDecoderOutput out) 方法进行解码操作
ISO8583Encoder 继承 ProtocolEncoderAdapter 自行实现encode(IoSession ioSession, Object msg, ProtocolEncoderOutput out) 方法进行编码操作
业务处理工厂类
提供各种业务场景下对应的消息处理器
业务处理工厂的spring配置
根据消息类型自动调用相应的Handler处理
BusinessHandler业务处理类
每个业务处理类均继承了抽象业务处理类AbstractBusinessHandler,该抽象类实现了消息的基本处理逻辑,如校验消息有效性、校验参数合法性,mac计算等等,然后由具体的业务处理实现业务处理
例如签到处理类SignUpHandler只需实现以下方法
@Override
public void handleBusiness(IsoMessage req, IsoMessage resp)
该方法入参为由iso8583报文实例化来的请求对象,业务处理逻辑实现后,只需要设置好返回的IsoMessage resp对象即可。
以上。欢迎指正。
- 基于ISO8583协议服务端与POS机数据交互
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互
- Android客户端采用Http 协议Post方式请求与服务端进行数据交互
- ISO8583协议
- ISO8583协议
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- Android与服务器端数据交互(2)(基于SOAP协议整合android+webservice)
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- Android与服务器端数据交互(基于SOAP协议整合android+webservice)
- SQL优化总结
- php文件操作2
- java序列化和反序列化初解和面试需求
- find命令
- [LA 6751 Mixed Flight Plans] Floyd+图上按链DP
- 基于ISO8583协议服务端与POS机数据交互
- sublime text 做java IDE sublime + myEclipse = subclim 炫酷!
- Oracle小知识总结
- adb命令卸载/system/app下的apk 2014.9.30
- Shellshocking OpenVPN servers
- OpenGL 反馈选择模式
- POJ3311
- 获取客户端mac地址
- oracle 性能优化--索引总结