APP下载

基于微信的电动汽车充电运营平台实现

2017-03-31张梅

软件导刊 2016年8期
关键词:移动支付微信公众号

张梅

摘 要:电动汽车发展迅速。为了解决电动汽车充电难和充电桩闲置的矛盾,设计了电动汽车充电运营平台系统,实现了平台的扫码充电、移动支付、查询充电状态等功能。以工程实践为本,论述了微信公众平台和WebService技术,研究了Socket服务器的基本原理。平台已成功应用于某电动汽车充电桩运营商。

关键词关键词:WebService;Socket服务器;电动汽车充电;微信公众号;移动支付

DOIDOI:10.11907/rjdk.161410

中图分类号:TP319

文献标识码:A 文章编号:1672-7800(2016)008-0077-03

0 引言

电动汽车以电代油、环保高效,成为目前新能源汽车的主力[1-4],其配套设施充电桩也得到迅速发展。但目前充电桩生产厂家各自为阵,充电卡不能通用;运营商参差不齐,管理不统一;结算方式不一致,无法统一结算,由此造成大量充电桩处于闲置状态,严重阻碍了新能源汽车的发展。

移动互联网蓬勃发展,我国移动智能设备2015年达到8.99亿[5]。数据研究公司IDC报告显示,2017年全球移动支付金额将突破1万亿美元,移动支付业务将呈现持续走强趋势。

将移动支付应用到电动汽车行业是条新路。本文提出一种便于电动汽车车主充电和付款、利于运营商推广和管理的充电桩解决方案。充电桩运营商申请微信公众号,获取相应资源开发公众号功能,构成前端。建立一个与充电桩交互的运营平台,开发出相应的WebService方法供前端调用。用户只需在充电桩上扫描二维码即可在微信里实现充电支付,方便快捷,本系统对不同运营商的充电桩皆可使用,且无须办理充电卡或下载运营商App。

1 系统架构

本系统分为平台层、网络层和终端层,架构如图1所示。平台层是核心,包含WebService服务端和独立运行的数据集中服务器。数据集中服务器主要负责与所有分散的充电桩通信,并维持长连接,辅助WebService服务端;WebService服务端主要监听微信端的用户请求,通过数据集中服务器获取充电桩响应再返回给用户。终端层包括交流桩、直流桩等电动汽车充电终端设施和智能手机、平板电脑、PC机等用户设备。PC机便于运营商管理后台,电动汽车车主则用智能手机来控制充电桩给电动汽车充电,是平台的输入端,平台的输出是充电终端设施,负责完成车主指令,由此构成完整的系统。网络层是平台层与终端层的纽带,提供数据传输的通道,使用TCP/IP协议,包括有线网和无线网。充电桩可通过有线光纤网与平台交互数据,智能手机则可通过无线Wi-Fi、4G网络等与后台通信。

2 系统组成及实现

系统由微信公众号、Web后台管理、WebService服务端和数据集中服务器构成。微信公众号相当于内嵌的浏览器,提供用户交互界面;Web后台管理主要负责对用户及充电桩进行管理;WebService服务端处理微信公众号转发的用户请求,通过数据集中服务器将命令发送给充电桩执行,数据集中服务器负责处理所有充电桩的连接请求,收发充电桩的通信报文,按照协议解析、转发给WebService服务端。

2.1 微信公众平台

2.1.1 微信公众号

微信公众号的载体是微信,在微信里关注公众号即可使用。手机内存占用少,开发简单快捷,用户使用方便,易于推广。用微信公众号结算,解决了用户出门带多卡、忘带卡无法充电的烦恼,解决了跨运营商、跨地区结算的难题。

2.1.2 微信公众平台开发

微信是腾讯公司于2011年推出的一款通过网络快速发送语音短信、视频、图片和文字,支持多人群聊的手机聊天软件。微信公众平台是在微信的基础上新增的功能模块。在微信公众平台上,个人和企业可以申请一个微信公眾账号,实现和特定群体的文字、图片、语音等全方位沟通、互动[6]。

微信公众号开启微信公众平台的“开发模式”,可以使用公众平台的接口开发程序与用户进行消息交互。用户关注了微信公众号后,可以向该公众号发送消息,消息通过网络到达微信后台,微信后台将该消息转发到平台服务器,服务器接收并解析消息,从数据库查询数据或下发命令给充电桩执行,将结果返回给微信后台,微信后台将结果转发给微信客户端,公众号回复的消息到达用户手机[7]。系统数据交互见图2。

在此数据交互过程中,微信就相当于平台的内置浏览器,程序员开发的平台服务器要能够接收微信后台发送的用户请求,并实现自己的业务逻辑,将用户需要的数据返回给微信后台,该部分功能由WebService服务端完成。

2.1.3 电动汽车充电微信公众号实现功能

通过需求分析,本平台主要实现电动汽车的充电和支付功能,具体菜单包括扫码充电、充电进度、充电记录、电桩搜索、充电预约5项。充电流程如图3所示,其中涉及到WebService方法,有连接握手、验证充电桩合法性、下发开始充电、查询充电桩状态、下发结束充电、保存/查询充电记录、设置电价、解锁或锁定充电桩、微信充值、查询充值记录、查询账户信息等,具体开发步骤详见微信公众平台开发者文档,在此不再赘述。平台与充电桩通过Socket进行通信,公众号使用RPC方式调用WebService,下面详述Socket服务器开发和WebService服务端开发。

2.2 数据集中服务器实现

数据集中服务器决定着平台的充电桩接入容量,主要通过Socket实现,而充电桩与服务器是长连接,需要异步通讯,故服务器采用Socket + 异步回调方法,大概能接入7 500个客户端,这对于中小型运营商已经足够。

在异步模式下,服务器使用BeginAccept()方法和EndAccept()方法来完成连接到客户端的任务。BeginAccept在异步方式下传入连接尝试,不必等待连接建立就可执行后面程序。注意在调用BeginAccept()之前,必须使用Listen方法来侦听是否有连接请求。

使用BeginAccept()的基本流程:①创建本地服务节点,并新建套接字与本地服务节点进行绑定;②在端口上侦听是否有新的连接请求;③请求接入新的连接,传入Socket实例。

当BeginAccept()方法调用后,一旦有新的连接发生,将调用回调函数,而该回调函数必须用来结束接入连接操作的EndAccept()方法。客户端采用Connect()请求连接,建立连接后,可与服务器端进行数据通信。服务端用BeginSend()和EndSend()方法发送数据,用BeginReceive和EndReceive来接收数据。

为使服务器具有很高的响应速度且控制简单,采用程序阻塞的方式处理充电桩的连接,也即线程同步。.Net提供了EventWaitHandle类,即事件等待句柄来表示一个线程的同步事件,该类允许线程通过互发信号和等待彼此的信号来达到线程同步的目的。此类有2个子类,分别为AutoRestEevnt(自动重置)和ManualRestEvent(手动重置)。

本程序采用ManualRestEvent对象创建一个等待句柄,在调用BeginAccept方法前使用Reset方法允许其它线程阻塞;为了防止在连接完成之前对套接字进行读写操作,务必要在BeginAccept方法后调用WaitOne让线程进入阻塞状态。当有连接接入后,系统会自动调用回调函数,所以当代码执行到回调函数时,说明连接已经成功,并在函数的第一句就调用Set方法让处于等待的线程可以继续执行。

2.3 WebService技术

2.3.1 WebService技术简介

WebService是一种通过Web部署提供对业务功能访问的技术,通过它能使运行在不同机器上的不同应用无需借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成。Web Service将消息以XML格式编码,并将消息通过标准的互联网协议(如HTTP)发送出去,与其它应用程序进行通信。

WebService是面向对象的服务体系结构(SOA),包括3个关键技术:SOAP、WSDL和UDDI。WebService的开发者借助UDDI(Universal Description, Discovery and Integration,通用描述、发现和集成协议)在互联网上公布Web Service。任何语言、任何平台上的客户都可以阅读WSDL(Web Service Description Language)文档,通过SOAP调用这个WebService[8]。

2.3.2 WebService技术实现

鉴于快速开发需求,我们采用C#开发电动汽车充电运营平台,开发环境为Microsoft Visual Studio 2010;平台使用SQL Server 2008数据库管理用户、存储充电记录和充值记录。

考虑平台的扩展性,采用三层架构体系(3-tier application)。通常意义上的三层架构就是将整个业务应用划分为:表示层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。表示层(UI)用于显示数据和接收用户输入的数据,为用户提供一种交互式操作界面;业务逻辑层(BLL)操作数据访问,对数据业务进行逻辑处理;数据访问层(DAL)负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或XML文档。区分层次的目的是为了体现“高内聚,低耦合”的思想。此外还需要Model实体类来传递数据。

(1)在SQL Server 2008中建好用户表、充电记录表、用户与充电记录表之间的关系表、充值记录表、用户与充值记录表之间的关系表。

(2)在VS2010中新建结构工程,分别是Model层、DAL层、BLL层、UI层。

(3)使用三层结构代码生成器连接数据库,生成相应的Model和DAL层,并复制到相应的VS2010工程后,作相应修改,使DAL层能访问数据库。在UI层添加Web代码,构建用户管理和充电桩管理界面。

(4)在BLL层完成数据库逻辑操作,包括用户的增删改查、充电记录的增查等。充电实时控制的相关命令需与充电桩进行通信,使用Socket编程,按照已经规定的协议进行数据交互。

(5)在VS2010中新建WebService工程,调用BLL层的函数实现服务方法。使用IIS将Web服务发布到相应的服务器,供微信公众号开发者和Web前端调用。数据集中服务器在Web访问时必须启动,即将监听函数写在Global.asax的Application_Start函数中。为了防止Web无访问造成充电桩无法连接服务器,可利用网页缓存过期方法来定时访问Web。

3 应用实例

笔者实验室与某充电桩运营商合作共同研发了基于微信的电动汽车充电运营平台,目前应用于龙门寺高速服务区。用户开车到充电桩附近,关注公众号并授权,会收到用户余额信息,见图4。若余额不足,则需选择菜单栏“賬户”/“充值”对账户进行充值,成功后方可进行充电操作。通过扫描充电桩上二维码,会显示图5所示界面,包括充电桩信息、用户余额以及充电方式选择,可选择定额充电或定时充电,如果都不填,则默认为充满为止。输入用户密码,点击“开始充电”。可选择“充电”/“充电进度”查询充电进度。如果是交流桩,充电进度界面会显示充电时间或充电金额信息;如果是直流桩,除显示以上信息外,还会显示电池SOC值、电池温度和电池电压。在充电进度界面下可根据需要提前结束充电。如不提前结束,则充电桩将按要求正常结束充电、生成充电记录、完成扣费并通知用户。“充电记录”提供给用户查询,也是扣费的依据。

4 结语

本文设计并实现了基于微信的电动汽车充电运营平台,为电动汽车充电提供了一种解决方案。使用微信公众平台和WebService技术开发运营商平台,简单快捷,扩展性好,用户只需微信扫一扫即可实现充电,使用方便。后期将建设电动汽车充电运营统一管理平台。

参考文献:

[1] SORTOMME E,EL-SHARKAWI M A. Optimal charging strategies for unidirectional vehicle-to-grid [J] . IEEE Transaction on Smart Grid,2011,2(1):131-138.

[2] GUOQINGLAI,WANG YAO,SUN HONGBIN,et al. Research on architecture of ITS based smart charging guide system [C].Power and Energy Society General Meeting. San Diego:IEEE,2011:1-5.

[3] 王恩琦.电动汽车充电设施运营模式及规划研究[D].北京:华北电力大学,2012.

[4] 殷树刚,刘磊,胡宇宣,等.市政路灯和电动汽车充电桩的一体化系统研究[J].供用电,2014,31(8):24-27.

[5] 移动数据服务商QuestMobile.2015年中国移动互联网研究报告[EB/OL].2016-01.http://tech.sina.com.cn/2016-01-08/doc-ifxnkkuy7746197.shtml

[6] 钟志勇.微信公众平台应用开发实战[M].北京:机械工业出版社,2013.

[7] 微信公众平台开发者文档[EB/OL]. http://mp.weixin.qq.com/wiki/home/

[8] 房晓东.ASP.NET从入门到精通[M].北京:化学工业出版社,2009.

(责任编辑:杜能钢)

猜你喜欢

移动支付微信公众号
以微信红包为例分析移动支付对互联网金融的促进作用
从财务角度探讨支付宝移动支付业务对医院的挑战与对策
江苏生鲜产品微信公众号营销问题及对策研究
微信公众号在高校“Photoshop图像处理”课程中的应用