利用微信公众平台设计一款座位预约系统软件, 扩展传统座位预约系统功能。【应用背景】传统座位预约系统缺乏在移动平台领域的应用, 而微信是目前移动终端的主要应用入口, 拥有大量使用人群, 适用于新型座位预约系统。
方法采用ASP.NET技术开发平台, 结合HTML5、CSS3、AJAX等技术进行前台设计, 利用微信公众平台消息回复接口, 将座位预约系统的基本功能嵌入到微信平台中。
结果用户可通过微信客户端查询自习室座位使用情况, 搜索好友座位位置, 预约座位等功能。
结论本应用探索了在移动平台上的开发模式, 对此类微信公众号的开发具有一定借鉴意义。
[Objective] The seat reservation system software based on the WeChat public platform can extend the functions of traditional seat reservation system. [Context] Traditional seat reservation system is not applied to the field of mobile platforms. The WeChat is the main entrance of mobile terminal with a large number of users, so it is a good choice for seat reservation system. [Methods] Based on ASP.NET, this system is designed by HTML5, CSS3 and AJAX etc. Futher, embed the basic function of seat reservation system into the WeChat platform by the message interface. [Results] Users can check the seats condition, search their friends’ exact positions and book the seats by WetChat. [Conclusions] This application explores the development pattern on the mobile platforms, and it has a significance for developing the WeChat public accounts.
2010年以来已有部分高校购买或自行开发图书馆座位管理系统, 通过VB、Flash、ASP、数据库等技术, 实现了具有自助座位派发、选择交换座位、座位保留、违章管理和实时显示座位状态等功能的管理系统[1](如温州医学院[2]、清华大学[3]等), 以此解决图书馆占座现象。但是笔者研究发现, 此类系统虽在一定程度解决了图书馆占座问题, 但还存在一些需要改进的地方, 比如一体机设备成本高、处理不够灵活, 系统灵敏度低导致选座等待时间过长, 操作繁琐致使用户使用感差, 人性化服务欠缺, 个性化定制不足等。
微信公众平台可以实现与特定群体通过文字、图片、语音进行全方位的沟通与互动[4], 利用其消息回复接口, 结合系统后台程序, 将座位管理系统的功能整合进微信平台, 如此便能够较好地解决以上各种问题。
座位预约系统设计的目的是实现对座位的高效有序管理, 根据学生需求, 保证系统具有良好易用性、稳定性和扩展性。系统功能模块如图1所示:
(1) 微信号与座位预约系统账号绑定。将用户特有微信OpenId身份标识与用户的座位预约系统账号进行绑定, 绑定账号的用户方可使用其他功能。
(2) 座位使用情况查询。使用户更加便捷地了解当前自习室座位使用情况, 用户无需进入图书馆或自习室便可获取座位信息, 极大地节省了用户时间。
(3) 搜索好友座位位置。帮助用户快速定位好友的位置, 此外还可作为用户预约座位成功后的凭证。
(4) 在线座位预约。用户可通过点击预约座位图文消息链接或利用其他浏览器进入座位预约界面, 预约成功后用户需在限定时间内确认预约信息。
(5) 黑名单管理。针对用户违规的一种约束机制, 系统自动将违规用户列入黑名单。
(6) 后台管理。管理员登录后台系统进行座位管理, 查询当前图书馆座位使用情况, 统计人数等操作。
消息接口配置是微信二次开发的第一步, 可实现公众平台与本地后台正常通信。系统运行机制如图2所示, 用户成功关注公众账号后, 将接收公众号推送的图文消息。用户可点击座位预约图文消息链接进入预约座位界面, 也可向公众号发送消息, 消息会首先到达微信服务器, 并由其转发到微信公众平台, 公众平台会根据接口配置中的URL信息, 将用户发送的消息转发到本地后台, 后台接收消息后会判断消息的类型, 并进行相应处理[5], 如通过访问数据库中记录返回座位使用情况、好友位置或设置用户头像、添加用户预约座位信息等操作。
本系统以后台数据库为支撑, 通过前台界面实现座位预约功能。
(1) 数据库设计
后台数据库采用SQL Server 2012, 其中用户信息表用于保存用户个人信息; 座位预约信息表保存座位信息, 状态字段共有三个属性(未确认、正在使用、保留), 系统根据状态字段对座位进行管理并控制人员进出; 历史记录信息表用于保存非当天的座位使用信息, 以便后期进行统计和数据分析; 黑名单表用于保存违规次数超过限制的用户信息。限于篇幅, 不列出各表的详细字段。
(2) 座位预约界面设计
座位预约界面采用HTML5和CSS3设计。为使座位管理系统平面图易于识别, 按照阅览室座位实际布局情况设计座位平面图, 对所有座位统一编号, 编号由三位数字组成, 如“ 001” 、“ 002” 等。未被选择的座位显示座位号, 而正在使用的座位显示人物图标, 用户可直观方便地选择座位。座位预约界面如图3所示:
微信接口接入是为了将系统与公众平台对接, 即在公众平台上使用系统中的一些功能, 微信消息回复接口是公众平台与系统后台通信的通道, 具体步骤如下: 登录微信公众平台, 进入开发者中心, 点击“ 修改配置” 按钮, 填写系统后台URL(服务器地址)和Token(令牌), 提交后, 微信公众平台向后台URL发送GET请求, 验证服务器地址的有效性, 请求包括4个参数: Signature (微信加密签名)、Timestamp (时间戳)、Nonce (随机数)和Echostr (随机字符串)。系统后台通过检验Signature对请求进行校验, 校验成功后将返回Echostr参数, 否则认证失败。
用户向微信公众平台发送消息后, 后台将收到转发的XML数据包, 通过解析XML数据包, 可获得用户OpenId、MsgType和Content等消息, 根据消息内容进行相应处理, 并将处理结果封装成XML数据包发送给微信公众平台, 最终由微信后台转发给用户。消息解析主要代码如下所示:
//将接收的用户消息转为字典
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlStr);
Dictionary< string, string> mo = new Dictionary< string, string> ();
var data = doc.DocumentElement.ChildNodes;
for (int i = 0; i < data.Count; i++)
{
//变量mo中以键值对的形式保存用户发送的消息
mo.Add(data.Item(i).LocalName, data.Item(i).InnerText);
}
……
消息回复主要代码如下所示:
//获得MsgType值
mo.TryGetValue("MsgType", out str);
//按类型对消息处理
……
//将处理结果封装成XML数据包
string str = string.Format(@"< xml> ……< /xml> ", ……);
//消息发送
HttpContext.Current.Response.ContentType = "text/plain";
HttpContext.Current.Response.Write(str);
后台收到用户发送的消息后, 判断用户是否已绑定账号, 若已绑定, 则判断消息类型, 若消息为文本类型, 后台将调用文本消息处理模块处理消息, 验证消息合法性, 随后根据消息内容查询数据库, 并将查询结果封装成图文消息XML数据包返回给用户。若消息为图文类型, 后台将调用图文消息处理模块解析图文消息的XML数据包, 并将< PicUrl> 节点(图片在微信服务器中的地址)内容存储在数据库中作为用户在系统中的头像。消息处理流程如图4所示。
用户点击图文消息进入座位预约界面, 客户端利用AJAX中XMLHttpRequest对象将用户预约的座位信息发送到后台。后台调用Request.QueryString [“ 名称” ] 方法获得客户端传来的数据, 同时将用户预约的座位信息存入数据库, 用户成功选择座位后, 后台将
利用C#委托为用户创建一个定时器, 并将定时器插入定时器队列队尾, 后台获取队首元素, 并在While循环里判断TimeSpan.TotalSeconds大于或等于系统设置的时间间隔是否成立, 若成立则预约超时, 系统将删除此定时器并退出While循环。否则继续循环。关键代码如下:
//新建XMLHttpRequest对象
var xmlHttpReq = new XMLHttpRequest();
//设置回调函数, 选座成功后更新座位信息
xmlHttpReq.onreadystatechange = callback;
//将座位信息传入后台
xmlHttpReq.open("GET", "Back.aspx?number=" + str +"& room
=" +room +"& way=" +way+"& num="+ num, true);
xmlHttpReq.send(null);
座位预约模块流程如图5所示:
目前, 西北民族大学座位预约系统还处于测试阶段, 主要测试了微信公众平台消息回复接口以及系统后台功能, 其间发送消息次数统计如图10所示:
通过与图书馆管理员沟通和分析用户反馈信息, 发现系统还存在以下两方面需要改进:
(1) 增强用户体验
图书馆座位预约微信公众平台申请的是订阅号, 不能为公众号设置自定义菜单, 导致了用户体验比较单一, 解决方法是通过“ 微信认证” 获得自定义菜单接口, 为公众号设置个性化的自定义菜单, 从而提高用户体验。
(2) 提高消息响应速度
由于系统后台部署在本地计算机, 服务器带宽低, 经常会出现响应用户超时现象, 导致用户不能及时收到公众平台推送的消息, 解决方法是购买或租用高带宽的服务器, 并将后台部署于其上, 即可减少出现延迟错误问题的次数。
本系统通过与微信平台的结合, 充分发挥微信便捷易用等优势, 使系统更加灵活易操作, 并在很大程度上节省投资成本, 改善图书馆座位资源利用率低的问题, 具有很强的实用性。系统中采用的各种人性化服务更加方便用户, 给用户创造了一个更加简单易用的座位预约体验。
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|