物联传媒 旗下网站
登录 注册
RFID世界网 >  技术文章  >  支付  >  正文

基于移动支付的POS终端系统软件研究

作者:RFID世界网收编
来源:中国一卡通网
日期:2012-02-22 17:48:13
摘要:本文介绍了GPRS无线通信网与无线打印终端系统之间的实时数据通信流程、通信协议及其软件设计与实现方法,详细地分析了各软件层次的实现方法和TCP/IP在RABBIT3000上的实现,达到了移动支付即时获取的设计目的,取得了良好的经济效益和社会效益。

    引言

    在信用卡应用不到半个世纪,支付方式又将经历一次历史性的变革——基于无线通信技术上的移动支付方式的出现,使支付形式彻底摆脱空间上的一切束缚,不但广泛而便捷地应用在固定交易场所;而且可以实现移动过程中的支付功能,从而为消费者创造了更灵活、更亲切的消费环境,实现了钱包的电子化、移动化,是一种全新的支付手段。

    目前,世界各国都在积极研究这项新兴的移动支付系统,澳大利亚和芬兰已经率先推出了商用模式,广东省也在国内第一个推出了商用的移动支付系统,移动用户可以通过他们的手机购买地铁票、可乐、零食等商品。据统计,移动终端将在三至五年内将成为广泛使用的支付工具,然而这种新兴的支付方式,还不能提供消费者票据凭证,这不符合中国人目前的消费观念,人们急待一种能够获取票据凭证的方法来完善这一新兴的支付方式,基于这种状况研制开发无线POS 打印终端系统就很有必要。

    1 系统总体方案的设计

    系统总体框图如图 1 所示: 

     统组成说明:主控CPU 采用Z-WORLD 公司的RABBIT3000,SRAM 采用CYPRESS 公司的CY62128,FLASH 采用SST 公司的SST39VF020,打印机采用GPRINTER 公司的GP-7635,GPRS模块采用西门子公司的MC35,CPU 内嵌TCP/IP 协议栈。

    系统整体框架如下,为了控制整个系统稳定运行,系统需要一个微处理器,为了打印出一张凭证,系统需要一个微型打印机。因为系统需要通过无线的方式接入Internet,所以该系统还需要一个无线通信模块,该通讯模块可以接入Internet,选用GPRS 通信模块或者CDMA 通讯模块。为了接入Internet,仅仅有一个通讯模块还不行,还需要遵循Internet 的共有通信协议。这样改系统有好几种组合方式,本系统选用内嵌TCP/IP 协议栈的CPU。采用MCU 及固化了TCP/IP 协议的芯片组成应用系统的核心,应用系统可以直接上网,硬件电路相对简单。该方案具有如下优点;①不依赖PC 机或高档单片机,真正实现8 位单片机系统直接接入Internet,整个系统完全自给自足;②使用外围器件少,系统成由低。

    2 软件层次结构

    程序中的所有代码都是由C 语言编写的,并采用分层的结构,从底到上分别为:串口驱动层、GPRS 模块驱动层、PPP 协议层、IP 协议层、UDP 协议层与应用层。上层函数的实现需要应用到底层函数,而底层函数的任务就是为上层函数提供服务,最终完成应用层任务——传送数据。各层的主要函数如图2 所示: 

    2.1 驱动程序编写

    首先是串行口驱动层。它实现打开串口(OpenComm)、关闭串口(CloseComm)、读串口数据(ReadComm)、写串口数据(WriteComm)等函数。例如 WriteComm 函数向串口发送一个字节的数据,而transmit 函数向串口发送一个字符串的数据。

    然后,在这些串口函数的基础上编写GPRS 模块的驱动函数。微控制器通过串行口控制GPRS模块,进行拨号、设置等操作。控制的方法是采用AT 命令。在控制GPRS 模块拨打移动梦网GGSN的登录号码“*99**1#”之后,GPRS 模块就转入在线模式(0n-Line)。此时微控制器向串行口发送的所有数据都透明地传送给了GGSN ,同样GGSN 的回答也传回单片机的串行口。当数据传送完成后,微控制器需要通知 GPRS 模块结束会话,并从在线模式转口普通的命令模式,这可以通过置高DTR 线完成。同时,如果线路由于异常断开,CD 线会回复到平常的低电平,所以处于在线模式下也要不断检测CD 线是否处于高电平。根据这些操作,可以编写GPRS 驱动函数:初始化GPRS模块函数(GPRSInit)、拨号函数(GPRSDial)、断开连接函数(GPRSHangup)、检测是否处于在线状态函数(GPRS0nline)。

    这些底层的驱动函数将会使上层协议的编写很方便,更重要的是,它为我们提供了一个驱动抽象层。当底层硬件做出改动的时候,只需要对底层的驱动函数进行改动,而上层函数的代码不变。

    2.2 PPP 协议的实现

    由于移动梦网的GGSN 与GPRS 模块通信时遵循PPP 协议,所以要在微控制器中也实现一部分PPP 协议才能与之对话。GPRS 模块在拨号后首先要与GPRS 网关进行通信链路的协商,即协商点到点的各种链路参数配置。协商过程遵守LCP(Link Control Protocol)、PAP (Password AuthenticationProtocol)和IPCP(Internet Protocol Control Protocol)等协议。其中 LCP 协议用于建立、构造、测试链路连接;PAP 协议用于处理密码验证部分;IPCP 协议用于设置网络协议环境,并分配IP 地址。

    协商机制用有限状态机的模型来实现。一旦协商完成,链路已经创建,IP 地址已经分配就可以按照协商的标准进行IP 报文的传输了。根据应用的不同,IP 报文中可以携带UDP 报文,也可以是TCP或ICMP 报文。数据传输完成之后,微控制器会向GGSN 发送LCP 的断开连接报文,以终止网络连接。

    PPP 协议的帧结构如图3 所示。微控制器的串口中断接收程序首先以包起始和结束符来判断是否有完整的PPP 包,并对PPP 包的内容进行校验;以确定数据包的完整性和正确性。然后,在主循环中进入PPP 报文解析模块,解析过程如图4 所示。 

{$page$}

    2.3 登录GGSN 的过程

    系统的一个难点是微控制器登陆 GPRS 网关(GGSN)并与网关通过LCP、PAP、IPCP 协议进行协商的过程。LCP、PAP 与IPCP 协议的帧结构大同小异,最常用的为请求(REQ)、同意(ACK)和拒绝(NAK)三种帧。微控制器与GGSN 各为一方进行协商,任何一方都可以发送REQ 帧请求某方面的配制,另一方觉得配置不能接受会回应NAK 帧,如果可以则回应ACK 帧。为了节省资源,我们只处理这三种数据帧,其它链路问题都由微控制器在程序控制下自己重新拨号解决。协商过程大致描述如下:在拨号成功连接后,GGSN 首先会返回一个PAP REQ 数据帧。我们发送一个空 LCP REQ 帧,以强迫进行协议协商阶段。随后,GGSN 发送LCP 设置帧,我们拒绝所有的设置并请求验证模式。GGSN 选择CHAP 或PAP 方式验证,我们只接受PAP 方式。然后,进行PAP 验证用户名和密码过程,在GPRS 中用户名与密码都为空,如果成功,GGSN 会返回IPCP报文分配动态IP 地址。此时,就完成了与GGSN 的协商过程。协商过程的状态转换如图5 所示。 

    协商完成后进入 IP 数据报通信阶段。此时,微控制器向GGSN 发送的所有包含IP 报文的PPP 报文都会被传送给Internet网中相应的IP地址;而远端所有向微控制器IP地址发送的报文也都会经GPRS网传送到微控制器上,从而完成微控制器与远程主机通过互联网的数据传输。

    3 TCP/IP 在 RABBIT3000 上的实现

    Rabbit 3000 系列芯片是一种高性能8 位器件。由于其C 语言友好指令集和快速数字处理功能,因而受到瞩目。Rabbit 结构以Zilog 公司的原始Z80 微处理器为基础,但作了几项改进:不像Z80指令集那样使用16 位寻址覆盖存储空间,而用一个20 位或1MB 的实际存储空间;采取直接与静态存储器件相连接的方式;有3 条存储芯片选择线路和2 组写入/输出启动线路;片上外设包括4 个串行端口、l 个子端口、40 条p 线、7 个不同的定时器、精确脉冲发生硬件和电池支持的RTC。

    用户只需对应添加相关芯片及辅助设施(如电源、用户所需外设等)即可;而软件的实现,由于 Rabbit 3000 系列芯片得到 Dynamic C 编译器的支持以及实现TCP/IP 所需的库文件dcrtcp.lib,因此只要会用C 语言就可以进行开发。用户关注的重点也变为网络通信实现以后的代码编制及优化,可以极大提高开发进度。

    以下是 Dynamic C 实现 TCP/IP 协议通信的程序主体框架。程序中起始宏定义为默认IP 配置信息;“memmap”句可使程序在芯片里面运行时,如同在扩展代码窗口下被编译;“use”句使编译器按照库文件配置编译代码。

    #define TCPCONFIG 1
    #memmap xmem
    #use dcrtcp.lib
    main(){
    sock_init();
    for(;;) {
    tcp_tick(NULL);}
    }

    sock_init()和 tcp_tick()都是 TCP/IP 函数库的基本函数,前者为初始化TCP/IP 协议栈函数,使协议栈开始处理入栈数据报;后者主要有两个用途:①支持后台处理的最新信息;②测试 TCP/IP套接字的状态。

    利用Dynamic C 提供的TCP/IP 协议包,用户可以轻松建立起TCP/IP 通信。当通信建立以后,就可以在此基础上进行后续的进一步功能扩展,开展例如 HTTP、PPP 等应用层的协议实现。

    4 系统软件部分实现

    本系统软件部分主要包括4 个部分,l、GPRS 拨号部分2、TCP/IP 协议栈部分3、打印驱动部分4、存储部分。

    GPRS 拨号部分主要是采用PPP 协议向移动服务中心发出一个使用其网络的请求,并有服务中心验证通过,TCP/IP 协议栈是现在网络传输数据所共同遵循的网络传输与控制协议,打印驱动部分主要是控制打印机把需要打印的凭证给打印出来,存储部分主要是对存储器的控制以存储数据等信息。

    5 结语

    本移动支付系统充分考虑人们“一手交钱,一手交货”的消费心理,利用无线票据打印终端(无线POS 终端)打印收据,打印终端通过识别短消息的来源进行身份验证,依据客户需要,打印客户电话号码(或客户身份验证代码)、交易金额、交易时间、交易方打印POS 机器编号以及交易费用等详细信息,并可实现多层纸的打印。

    无线POS 终端采用GPRS 方式通过无线网络连接到移动局的GGSN,移动局的GGSN 通过Internet 与支付系统连接,这样无线POS 终端就可以与支付系统进行TCP/IP 通信。 GPRS 无线数据传输具有设备成本低、数据传输安全可靠、使用灵活方便等特点,非常适合在无线POS 终端上应用,因此无线票据打印终端具有接通速度快、传输速率高、配置灵活、建设成本低等优点。虽然目前国内市场上已有移动支付(利用手机支计小面额货款), 但是用户在使用的过程中;没有一个凭证并且在出现问题时(如手机中的钱被多扣除或者其他情况人用户也没有凭据与货主进行核实,也就是说目前移动支付没有形成一个闭环。这也是移动支付推广缓慢的一个原因。我们推出基于移动支付的无线POS 打印终端正好解决了这个问题,它将广泛应用于连锁便利店、药店、报亭、自动售货亭等地方,这将大大地改善人们的生活水平,使人们的生活更加便利。