微信公众平台在图书馆信息系统中的应用
2015-06-12夏文忠单长吉
夏文忠 单长吉
(昭通学院,云南 昭通 657000)
移动手持设备的发展给传统图书馆业务带来了巨大的挑战,如何让读者在大量的信息资源中快速方便准确的找到所需信息是图书馆界所面临的问题。据笔者对本校在校学生统计,2014年在校学生99%都使用了智能手机,这些智能手机中,安卓系统占90%以上,有少量的IOS和其它手机系统。腾讯公司于2011年推出微信服务,用于为智能手机用户免费收发多媒体信息,目前微信支持跨通信运营商、跨操作系统平台,通过网络快速发送免费语音短信、视频、图片和文字等信息。截至2013年11月注册用户量已经突破6亿,是亚洲地区最大用户群体的移动即时通讯软件。高校图书馆现已拥有各种功能丰富的数据库系统,本文从方便读者查询利用图书馆藏资源角度,给出一种微信公众平台与现有图书馆WEB应用系统之间实现无缝集成的方式。
一、高校图书馆移动应用现状
经过多年的发展,现各高校图书馆都实现了资源的数字化计算机管理,但要使用这些数据必须要使用相应的校园网络或者使用图书馆指定的OPAC系统。当前,许多读者已经转变传统的阅读习惯,从阅读传统的纸质图书资源转变为阅读电子图书。而各高校图书馆现在的各种期刊库、博硕士论文库和电子图书库等电子资源都只能使用PC客户端进行阅读和使用。对于利用智能手机为读者服务,国内的数据库提供商如中国知网、超星等公司提供了各自的Android版和IOS版阅读器,pdf格式也可以使用相应的阅读器来阅读。但阅读前都必须下载安装庞大的阅读软件,微信的跨平台、跨运营商的特性可以方便的集成图书馆各个数据提供商纷繁各异的系统,统一使用微信公众号为读者提供信息资源的扁平化多媒体服务。
对于各高校图书馆,移动业务有手机短信支持、WAP网站等服务。对于手机短信服务,因目前移动、联通和电信三家运营商的关系,不但短信业务收费,还不能同时支持三家运营商的业务,这也造成图书馆手机短信业务受限的现状。WAP网站虽然可以为读者提供手机网络访问的功能,但由于制作维护不便,目前也只有少量的高校图书馆使用。
微信公众号的免费开放使用,为解决图书馆馆藏资源的查询、利用,提供了新媒体的解决方式和手段。通过图书馆WEB2.0系统把图书馆现有系统进行资源整合,然后通过微信公众号的推拉模式把多媒体资源信息从图书馆系统中提取通过微信公众号再推送到读者微信号上,从而实现信息资源的移动媒体应用,提高馆藏资源的利用率。
二、系统设计
1、设计思路
基于微信公众平台的系统设计是构建在现有图书馆WEB2.0信息系统之上的系统,具体原理结构如图1所示。图书馆系统开发人员向腾讯公司申请微信公众平台公众号,申请成功后,搭建自己的WEB应用服务器,设置好微信公众号的接口调用。通过指令解析模块具体解析微信公众号接收读者发送的请求信息,解析后使用图书馆WEB服务器处理数据,得到具体结果后返回给微信公众号,通过公众号把具体查询结果返回给微信读者用户,实现读者使用微信公众号获取信息,图书馆利用微信公众号推送数据。(图附后)
2、开发架构选择
微信公众号现支持主流的程序开发语言,本文采用JAVA语言实现具体功能。因微信公众号开发使用HTTP的GET方法来实现微信公众号服务器与具体业务数据服务器间进行连接建立,用POST方法来收发数据信息,为了具体区别HTTP的请求与响应,系统结构采用JSP+Servlet+Spring-MVC实现具体业务处理与消息的传递与收发。
微信公众平台为了兼容各开发语言,POST方法传递的数据采用XML格式封装,把封装后的数据推送到开发者指定的应用服务器,具体应用服务器解析收到的XML数据,获取相应的用户请求,作用户指定的操作后,返回操作结果数据,通过WEB应用服务器再把数据封装为微信服务器能识别的XML数据,并传递给微信公众号服务器,经微信公众号服务器处理后转发给请求服务的用户。
图1 图书馆微信系统结构原理图
三、系统实现
1、消息接口配置
现微信公众平台开发要求开发人员申请服务号或者订阅号,对于图书馆应用,本馆申请了订阅号。要完成微信公众平台开发,需要作如下几步:
一、开放80端口的WEB服务器,本系统因采用JSP+Servlet开发,WEB服务器采用Tomcat;
二、验证服务器地址的有效性;
三、依据接口文档实现业务逻辑。
服务器配置微信定义了服务器URL、Token和EncodingAESKey三个基本参数,Token是由用户自定义的接口参数,EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。
验证服务器地址的有效性:
开发者提交信息后,微信服务器发送GET请求到指定的服务器地址,GET请求携带四个参数,如表1所示:
表1 GET请求参数
开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。对于加密/校验流程如下:第一.将token、timestamp、nonce三个参数进行字典序排序;第二.将三个参数字符串拼接成一个字符串进行sha1加密;第三.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。实现与微信公众平台连接的关键代码如下:
//微信服务器将发送GET请求到填写的URL上,这里需要判定是否为GET请求
boolean isGet=request.getMethod().toLowerCase().equals("get");
System.out.println("获得微信请求:"+request.get-Method()+"方式");
if(isGet){ //验 证URL真实性
String signature=request.getParameter("signature");//微信加密签名
String timestamp=request.getParameter ("timestamp");//时间戳
String nonce=request.getParameter("nonce");//随机数
String echostr=request.getParameter("echostr");//随机数字串
List
params.add(token);
params.add(timestamp);
params.add(nonce);
//1.将token、timestamp、nonce三个参数进行字典序列排序
Collections.sort(params,new Comparator
public int compare(Stringo1,String o2){
return o1.compareTo(o2); }});
//2.将三个参数字符串拼接成一个字符串进行sha1加密
String temp=SHA1.encode(params.get(0)+params.get(1)+params.get(2));
if(temp.equals(signature)){ response.getWriter().write(echostr); }
}else{ //处理接收消息 }
上述代码实现了微信公众号的接口配置,为了响应用户进行收发消息,还需要在主要Servlet中完成doPost方法的编程,下面是本系统实现消息回复的部分关键代码:
//将请求、响应的编码均设置为Utf_8(防止中文乱码)
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//调用核心业务类接收消息、处理消息
String respMessage=CoreService.processRequest(request);
//响应消息
PrintWriter out=response.getWriter();
out.print(respMessage);
out.close();
通过CoreService核心方法来完成读者用户的具体要求,得到结果后使用PrintWriter对象的response方法返回给请求用户,从而实现消息的回复。CoreService对象负责具体实现图书馆资源的查询、处理、续借操作。
2、处理关键技术
基于微信公众平台的系统开发使用了J2EE架构中的部分内容来完成开发,在系统开发中面临异构系统部数据的转换。为了兼容各个系统,微信采用XML格式来封装数据。本系统采用DOM4J框架[4]来完成微信息发送XML数据信息的解析,把微信传送数据由XML数据转换为Java对象来处理,当请求处理完成后,再使用开源的Xstream框架完成从Java对象到XML格式数据的转换。因XML的数据描述性,传送数据时采用CDATA格式完成特殊字符的数据传送。下面以文本数据为例,描述具体数据格式:
以微信公众号为基础的图书馆应用拓展了高校图书馆服务读者的形式,提高了图书馆服务读者的水平,让读者可以不受时空限制,任意访问学校图书馆的电子资源,为提升图书馆馆藏资源利用率作出具有实际意义的探索。在提升服务质量,服务水平的同时提升了图书馆的社会效应,具有一定的社会意义。
[1]微信,百度百科[EB/OL].http://baike.baidu.com/link?url=Vvcog4yYt6DXokWZsqiUks2YCamAIdRXFYOcmuufF8W671QCaogHv0wH4cZpLhd41HOAdUn1l4p8lMJMOzGIkKbpERJhUJbb4iJn8O6xLLi.
[2]移动互联网入口呈现多元化发展[EB/OL].中国互联网数据平台.http://h.cnnicresearch.cn/.
[3]牟燕.新一代OPAC 系统在高校图书馆中的应用研究[D].济南:山东理工大学,2010.
[4]周强,李宇等.基于dom4j 转换XML 为XHTML 页面的方法[J].计算机技术与发展,2010,1:43-45.
[5]Xstream 框 架,Xstream 框 架 介 绍 [EB/OL].http://xstream.codehaus.org/.