未来智讯 > 移动支付论文 > 基于移动支付的自动售货机设计与实现

基于移动支付的自动售货机设计与实现

发布时间:2017-12-07 08:59:00 文章来源:未来智讯    
    关键词:自动售货机;并口;银联闪付;移动支付
    中图分类号:TP368.2 文献标识码:A 文章编号:2095-1302(2016)10-00-04
    0 引 言
    随着科技进步与社会发展,智能化、自动化、网络化的商业机器在现实生活中的应用越来越广泛。在欧美日韩等经济发达国家或区域,自动售货机已成为人们日常生活中一种重要的商业销售渠道。其优势包括提供24小时服务、售货便利、场地占用小;无需专人值守、节省人力成本。此外还可以作为一种新颖独特的广告宣传媒体。国内自动售货机已经得到大力推广,通过自动售货机进行自助购物正逐渐成为一种新的消费习惯[1]。
    传统的自动售货机大部分仅支持现金和刷卡交易,采用人工管理和手工记录,当售货机出现缺货或故障时,管理人员不能及时获知,影响自动售货机的正常销售。近年来移动互联网与智能终端领域不断创新,伴随着3G / 4G、WiFi等无线通信技术迅猛发展,支付宝、微信支付等移动支付以及银联闪付业务(Quick Pass)等非现金非接触式的支付方式不断涌现,购物体验得到了进一步提升[2,3]。为解决传统交易手段不足及管理运营效率低下等问题,本文设计了一种支持多种移动支付方式并可通过3G网络远程监控销售信息的自动售货机,用户能够根据实际情况选择支付方式,同时管理人员能及时了解到各销售网点自动售货机的销售、库存、状态等信息,为销售网点合理安排、商品配送、机器维护等提供决策支持。
    1 系统整体设计
    本系统设计的自动售货机中央控制系统采用研华科技推出的Mini-ITX新型超薄工业控制主板,型号为AIMB-215,该主板搭载英特尔赛扬第四代J1900 / N2920四核处理器,具有丰富的连接性和多种高速I/O等特点,包括VGA、HDMI、RJ45网络接口、USB 2.0 & 3.0、COM串口、PCI-E扩展口以及用于3G功能的SIM卡槽。根据设计要求本系统硬件部分主要包括以下几个部分:
    (1)实现用户交互的触摸屏;
    (2)实现支付宝、微信移动支付以及远程服务器访问的3G网络模块;
    (3)通过串口通信的银联闪付终端;
    (4)通过并口驱动步进电机出货及回收装置。
    系统整体结构框图如图1所示。
    自动售货机运行Windows 7操作系统,采用Visual C#.NET开发用户交互界面以及底层外围硬件驱动程序。本系统软件主要包含以下四个部分:
    (1)人机交互界面。包括商品信息说明、顾客商品购买、移动支付选择以及维护人员后台管理等界面;
    (2)交易信息管理。包括交易信息网络提交及本地存储;
    (3)出货和货物回收管理。包括驱动步进电机完成货道选择、出货操作以及货物回收操作;
    (4)支付管理。包括银联闪付、支付宝和微信移动支付。
    自动售货机软件系统框架图如图2所示。
    2 系统实现
    针对本文所研究的自动售货机,用户先对商品进行选择,根据不同的商品购买说明指示用户进行下一步操作,当用户购买时按照支付方式开启银联闪付、支付宝或微信移动支付,待用户完成支付后驱动不同货道的步进电机转动一周,完成出货操作,同时将出货商品信息、用户支付信息和售货机库存信息通过3G网络传送至远程服务器,方便管理人员实时监控售货机的销售情况。
    2.1 出货管理实现
    出货操作的执行机构包括步进电机和电机驱动板,工控板通过PCI-E总线扩展的并口向驱动板发送使能信号、脉冲信号和方向选择使得步进电机运转。计算机并口的物理接口采用IEEE1284标准定义的DB25针内孔式接口,各针脚定义如图3所示。
    图3展示出并口的数据端口(D0-D7)、状态端口(S3-S7)、控制端口(C0-C3)的针脚及针脚在相应寄存器字节中的位置,其中数据端口和控制端口数据方向(共12个端口)可设置为输出,由于步进电机驱动板需要时钟频率CLK、方向CW和使能EN三根信号线,如果不采用译码电路计算机并口总共可提供四个步进电机的驱动信号[4,5],其电机控制原理如图4所示。
    由于Windows 7操作系统的安全策略,系统屏蔽了对硬件的直接访问,因此在编写并口操作的应用程序时,不能直接对并口进行操作。在Visual C#.NET工程中通过使用WinIO 3.0动态链接库方便地在应用程序中实现对计算机并口的操作,从而实现与外部设备的数据传输,通过设置并口对应端口的电平高低来产生脉冲时钟信号以驱动步进电机运行[6,7]。实现方法是将下载的WinIo64.dll和WinIo64.sys(针对64位Windows 7系统)放入Visual C#.NET工程可执行文件夹,并添加库文件WinIo64.dll,安装好WinIo64.sys的数字签名证书才能正常调用WinIO 3.0提供的接口函数。标准并口的基地址一般为0x378H,因此数据端口的地址为0x378H,控制端口的地址为0x37AH,利用WinIo 3.0的SetPortVal(IntPtrwPortAddr,intdwPortVal,bytebSize)函数可对端口0x378H和0x37AH写入数据,其实现代码如下:
    [DllImport("WinIo64.dll")]
         publicstaticexternboolInitializeWinIo();
    [DllImport("WinIo64.dll")]
    publicstaticexternvoidShutdownWinIo();
    [DllImport("WinIo64.dll")]
    publicstaticexternboolGetPortVal(IntPtrwPortAddr, outintpdwPortVal, bytebSize);
    [DllImport("WinIo64.dll")]
    publicstaticexternboolSetPortVal(IntPtrwPortAddr, intdwPortVal, bytebSize);
    publicvoidSetDateBuff(intWriteValue)
    {
    IntPtrPort=0x378H; //数据端口地址0x378H
    SetPortVal(Port, WriteValue, 1); //调用WinIo库函数SetPortVal写端口值
    }
    publicvoidSetControlBuff(intWriteValue)
    {
    IntPtrPort=0x37AH; //控制端口地址0x37AH
    intdwPortVal=0;
    GetPortVal(Port, outdwPortVal, 1); //从控制端口读取一个字节数据
    inttemp=dwPortVal&0xF0; //将低4位设置为0;高4位不变
    intWriValue=WriteValue&0x0F; //取设定值低4位;高4位为0
    temp=temp|WriteValue; //合并端口值高4位与设定值低4位
    temp=temp^0x0B; //C0、C1、C3取反(保证设定值与实际电平相吻合)
    SetPortVal(m_nport, temp, 1); //高4位保持端口原来的值不变,低4位实际输出
    }
    步进电机是数字信号控制电机,它将脉冲时钟信号转变为角位移,电机的转动角度由输入的脉冲数决定,电机的转速由脉冲信号频率决定。因此Visual C#.NET程序通过定时器利用WinIo 3.0函数改变并口相应端口的电平高低以产生脉冲信号并发送给驱动电路,驱动电路根据脉冲信号的频率和脉冲数量调整步进电机的转速和转动角度并根据CW控制信号的电平高低以实现电机方向的控制。由于货物放置在不同的机械货道上,不同货道由不同的步进电机驱动,当步进电机旋转一周时将货物推送至出货口,因此控制不同的电机可实现对应货物的出货操作。
    2.2 银联闪付业务实现
    闪付业务(Quick Pass)是银联最新推出的非接触式支付,具备小额快速支付的特征。用户购买商品确认金额后,使用具有闪付功能的金融IC卡在支持闪付交易的支付终端一挥便可快速完成支付,并且单笔金额不超过300元时无需输入密码和签名,因此自动售货机的小额交易业务非常适合银联闪付交易。本设计中使用的朗方闪付终端具备闪付业务模块以及与银联后台交互的GRPS通信模块,并通过RS 232串口与工控板通信。RS 232采用起止式异步通信协议,其特点是逐个字符进行传输,并且传输一个字符总以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。上位机程序与闪付终端双方必须共同遵循同一套通信协议才能保证数据传输的完整性与正确性[8]。通信协议主要包括数据帧头(用于判断数据起始)、数据长度(数据正文长度)、命令属性、应用类型、终端设备ID、数据正文、数据帧尾、LRC检验。数据帧结构如图5所示。
    工控机程序只需要通过串口发送和接收相应命令即可实现设备握手、签到、消费、扣款与结算功能,交易过程对通信数据安全要求较高,因此程序设计时需要实现数据检验与重发机制。在.NET Framework 2.0以上的版本中提供了Serial Port类,该类主要实现串口数据通信,使用SerialPort类的Write(byte[]buffer, intoffset, intcount)函数即可发送通信协议定义的十六进制帧数据。接收串口数据较为复杂,结合串口协议分析需要解决以下四个问题:
    (1)缓存串口收到的所有数据。
    (2)找到一条完整数据帧。
    (3)分析数据帧的命令内容。
    (4)将分析出的命令通知上层应用。
    缓存接收所有数据最为高效的方法是利用C#中的List结构,该结构能够方便地实现数据元素的增删改操作,因此利用SerialPort类的DataReceived增加接收事件将串口接收数据全部放入List结构后再分析。找出一条完整的数据帧,首先在缓存的数据中找到帧头,找到后检测后面两个字节的数据长度,然后计算缓存剩下的数据是否足够,数据不够就停止分析以减少时间消耗,如果剩余数据大于数据长度,则计算出数据帧LRC校验码并与缓存数据中的LRC校验码对比,如果校验码一致则说明数据帧传输正确,解析帧内容并通知上层应用处理,否则丢弃该帧等待重发。利用SerialPort类实现串口数据发送和接收的代码如下:
    privateListRecvBuffer=newList(256); //数据接收缓冲区设置为256字节
    publicvoidInit()
    {
    //初始化串口
    SerialPortcom=newSerialPort(“COM1”, 9600, Parity.None, 8, StopBits.One);
         com.DataReceived+=newSerialDataReceivedEventHandler(ComDataReceived); //增加接收事件
    com.Open(); //打开串口
    }
    publicvoidComDataReceived(objectsender, System.IO.Ports.SerialDataReceivedEventArgse)
    {
    Byte[]receivedData=newByte[com.BytesToRead];
    com.Read(receivedData, 0, com.BytesToRead); //从串口读取全部缓冲数据
    com.DiscardInBuffer(); //清空缓冲
    RecvBuffer.AddRange(receivedData); //将接收数据放入缓冲区等待分析
    }
    publicvoidSendDate(byte[]sendData)
    {
    com.Write(sendData, 0, sendData.Length); //向串口发送数据
    }
    2.3 支付宝和微信扫码支付实现
    随着移动支付的兴起,越来越多的消费者更倾向于使用这种方式付款,移动支付省去了出门带现金的麻烦,直接可用手机完成日常生活中的各种消费[9]。针对自动售货机的应用场景,支付宝和微信扫码支付业务可使用户通过支付宝或微信钱包扫描商家的二维码完成支付,在程序中集成的支付宝和微信支付开放平台提供了扫码支付SDK即可实现交易业务。扫码支付业务流程如图6所示。
    支付宝和微信扫码支付实现类似,此处仅介绍支付宝扫码支付实现。首先在Visual C#.NET工程项目中添加支付宝扫码支付库文件AopSdk.dll和F2FPayDll.dll,为了保证自动售货机终端与支付宝后台服务器之间的数据通信安全,终端与支付宝后台采用RSA加密方式接收和发送数据,因此调用支付宝接口前必须在支付宝商户后台设置商户终端的RSA公钥以及获取支付宝的公钥后才能正常加密和解密通信数据。自动售货机程序设定好商品信息和金额后调用tradePrecreate接口向支付宝后台提交订单创建请求,创建订单成功后返回二维码支付信息并展示给用户,程序在等待用户使用手机支付宝钱包扫描二维码确认支付的同时定时调用tradeQuery接口查询支付状态,当成功支付后即可驱动步进电机完成出货操作,如果未支付或支付失败则调用tradeCancel接口撤销订单。
    2.4 交易管理和人机交互实现
    每次交易完成时自动售货机都将交易和库存信息通过3G网络利用HTTP协议在广域网中实现跨Internet传送至后台服务器。其实现方法是售货机客户端利用http WebRequest对象向指定的URL发送GET请求,请求中包含了交易信息或库存信息,服务器端接受请求并将信息保存到数据库。由于3G网络的不稳定性,尤其在客流量较大的车站附近网络连接性差,客户端发送数据时必须检查网络的连接性并引入数据重发机制。当网络无法连接时,交易和库存信息本地化保存必不可少。采用小型应用程序内嵌轻量级数据库SQLite即可满足自动售货机的需求[10]。
    用户使用自动售货机购买商品时接触最多的是人机交互界面,触摸技术的发展使得人与机器之间的交互变得越来越简易和人性化。Visual C#.NET中的Windows窗体应用程序提供了强大的窗体设计器和丰富的窗体控件,在操作简洁、以用户为本的人机交互程序设计原则指导下,根据业务流程合理安排文本、按钮、选择等控件,人机交互界面设计效果如图7所示。
    3 结 语
    自动售货机已经是现代生活中的一个重要工具,已被越来越多的人接受。本论文研究了目前主流的无现金支付方式,设计了一种支持银联闪付、支付宝和微信移动支付并利用计算机并口驱动电机出货的新型自动售货机。它通过3G网络将商品销售信息和库存信息传送至远程服务器,提高了商家的运营效率。目前该系统已得到大力推广,在地铁站、公交站、火车站点提供各种公共服务的设施中都有安装,均取得了良好的市场效益。
    参考文献
    [1]景东男,韩建民,王爱华.基于物联网的自动售货机及远程监控系统[J].计算机技术与发展,2013,23(5):228-230.
    [2]邓娜娜,王鹏,杨子姜.基于ARM的自动售货机主控制器的设计与开发[J].计算机应用与软件,2012,29(5):260-261.
    [3]李昌盛,金瓯.基于GPRS网络的自动售货机监控系统的设计实现[J].计算机测量与控制,2008,16(3):327-329.
    [4]李秀霞.基于MACH3控制系统的5轴数控实验台的设计[J].制造业信息化,2013(4):74-75.
    [5]李胜勇,肖奇军.基于计算机并口的电磁式微电机驱动系统设计[J].微特电机,2015,43(11):80-82.
    [6]袁军,谭永东,任俊.利用WinIo实现并口数据通信[J].计算机与现代化,2009,8(8):49-53.
    [7]王晨光,孙运强,许鸿鹰.步进电机的单片机控制设计分析[J].国外电子测量技术,2008,27(9):39-41.
    [8]翟希述,王宝兴,范淼.基于VisualC#的串口通信程序设计[J].电子科技,2011,24(2):24-26.
    [9]汤金瓯,余世明.基于支付宝的自动售货机网上支付系统[J].机电工程,2010,27(5):124-126.
    [10]徐继宁,李建芯.SQLite在资产管理与环境监测系统中的应用[J].微型机与应用,2016,35(4):95-97.
转载请注明来源。原文地址:https://www.7428.cn/page/2017/1207/6848/
 与本篇相关的热门内容: