图书馆微信服务应用开发
——以辽宁科技大学图书馆为例

2016-06-27 08:48陈作新王玉香刘大鹏
大学图书情报学刊 2016年3期
关键词:服务创新微信平台微信

陈作新 ,王玉香 ,刘大鹏

(1.辽宁科技大学, 鞍山 114051;2.千山风景区管理处,鞍山 114045)

图书馆微信服务应用开发
——以辽宁科技大学图书馆为例

陈作新1,王玉香1,刘大鹏2

(1.辽宁科技大学, 鞍山 114051;2.千山风景区管理处,鞍山 114045)

摘要:图书馆微信平台发展迅速,普通的微信服务功能已经不能满足读者形式多样的利用需求。文章以辽宁科技大学图书馆为例,提出利用微信平台提供的接口, 用开源代码进行开发,结合PHP、Oracle、MySQL、XML、Javascript 技术将图书馆馆藏查询、借还提醒、违章查询等服务整合进微信平台,通过一键操作的形式利用图书馆资源和服务。该项应用开发对节约图书馆资源建设成本,提高信息化服务水平具有一定的促进作用。

关键词:微信;微信平台;移动服务;php;服务创新

1引言

微信 (WeChat) 是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序。微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语音短信、视频、图片和文字[1]。截至2013年11月,注册用户量已经突破6亿,是亚洲地区拥有最大用户群的移动即时通讯软件。其中,70%以上分布在20-30岁的年轻、时尚群体之间,在校学生使用普及率更是超过80%。因此,以大学生为主要服务群体的高校图书馆能否抓住微信公共平台快速发展的契机,发挥高校图书馆官方微信信息服务的功能,拓展文献信息服务渠道,是当前值得研究的重要课题[2]。

目前,已经有一些高校图书馆及地方图书馆将微信公共平台引入到移动服务中。清华大学图书馆早在2013年6月推出开发模式下的微信公共平台服务,能够为读者提供图书馆热点消息查询、馆藏书目查询和文化馆座位实况等服务,并在读者迎新活动中发挥了重要作用[3]。惠州学院图书馆、天津理工大学图书馆和昆明理工大学图书馆等图书馆在微信服务研发方面做得也比较好,实现了信息主动推送、数字资源查询、资源共建共享等功能,取得了较好的效果[4][5][6]。辽宁科技大学图书馆借鉴上述成功案例,积极探索和实践,尝试将馆藏查询、借阅查询、催还提醒、馆情通报等服务嵌入到微信公共平台,目前已经取得初步成果,下面将详细介绍具体实现过程。

2设计方案

2.1设计思路

微信公众号服务平台提供了一组开放接口的API,包括消息接口和高级接口。消息接口为开发者提供与用户进行消息交互的能力。对于成功接入消息接口的微信公众账号,当用户发消息给公众号,微信公众平台服务器会使用http请求对接入的网址进行消息推送,第三方服务器可通过响应包回复特定结构,从而达到回复消息的目的。2013年10月29日,微信公众平台向服务号开放语音识别接口,客服接口和OAuth2.0 网页授权接口等9大高级接口,让微信服务号更好地为用户服务,方便用户操作[7]。本文关于图书馆微信服务应用设计的思路是:通过消息接口和客服接口,结合本馆原有系统,包括汇文系统、座位管理系统、门禁系统和各个业务数据库,将馆藏查询、借阅查询、图书到期提醒、图书过期提醒、违章提醒、违章查询、自修室座位查询和馆情通报等服务嵌入微信应用,实现微信用户与图书馆服务的无缝对接,从而丰富读者与图书馆的互动。

2.2服务流程及架构

基于上述设计思路,本文设计开发的微信服务平台架构如图1 所示。具体流程为:(1)管理员启用开发模式,在微信公众平台中配置访问接口,在图书馆服务器部署本馆技术人员自主研发的微信公共平台应用程序;(2)读者通过点击自定义菜单访问微信服务器,微信服务器将自动回复消息转发至微信公众平台;(3)微信公众平台根据预先配置的访问接口,将消息转发给任务处理模块;(4)任务处理模块会根据读者发送消息的内容,按照既定的业务逻辑进行处理,访问图书馆相关的自动化系统后台数据库获取相关数据;(5)任务处理模块根据任务执行情况生成回复消息并返回给微信公众平台;(6)微信公众平台通过微信服务器将回复消息发送给读者。

图1辽宁科技大学图书馆微信公众平台服务架构

3具体实现

本文采用PHP+MySQL技术进行微信服务应用研发,系统程序部署在本馆服务器中。

3.1数据库设计

在PHPMyAdmin环境下,创建两个数据表tb_bangding和tb_tixing。数据表tb_bangding用来保存卡号绑定信息;数据表tb_tixing用来保存系统给读者发送提醒时的日志,以便管理员统计发送提醒情况。本文涉及到数据表tb_bangding,其结构如下所示:

表1 tb_bangding

表1中的OpenID是本馆微信平台应用中读者身份的唯一标识。只有读者在成功将卡号和OpenID号绑定后,才能进行查询借阅信息、违章信息或收到来自系统的催还提醒等操作。

3.2配置访问接口

配置访问接口是让微信公众号具备图书馆服务功能的首要环节。开通微信公众号后,登录微信公众平台,启用“高级功能”菜单中的“开发模式”。接下来,要登记接口的URL和Token,实现网址接入。Token用于生成签名,内容可任意填写;URL则填写图书馆用于消息处理的系统主页面。填写的URL需要正确响应微信发送的Token验证。成功配置接口之后,所有发送至微信公众号的指令将被转发给所登记的URL。

3.3系统主页面设计与实现

本文设计的系统主页面主要实现三个功能,分别是:第一,获取access token。access_token是辽宁科技大学图书馆微信公众号的全局唯一票据,公众号调用各接口时都需使用access_token。公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在微信公众平台官网——开发者中心页中获得(需要已经成为开发者,且帐号没有异常状态)。第二,响应自定义菜单事件。当读者点击自定义菜单时,系统主页面将根据具体的菜单命令自动回复消息。例如,读者在绑定卡号后点击菜单“借阅查询”时,系统会自动回复“点击此处您将查询当前借阅情况”。读者继续点击该消息内容,系统主页面将获得用户OpenID,并将其作为传递参数跳转到该菜单项的链接地址,即具体的任务处理程序去执行相应的任务。第三,系统主页面能够处理菜单事件之外的其他事件,例如读者关注微信号后,主页面能够立即向读者发出比较人性化的“欢迎加入”的信息。

3.4任务处理模块设计与实现

任务处理模块首先根据读者选择的菜单命令通过基础接口向读者回复消息。微信公众账号能够回复读者发送6种类型的消息:文本、图片、语音、视频、音乐和图文[7]。 在本系统中,包括两种类型任务处理模块:一种是响应菜单命令处理模块,包括证件绑定、馆情通报以及借阅查询、超期查询等查询功能模块。另外一种是具备提醒功能的模块,包括图书到期提醒、图书过期提醒、违章提醒等模块。下面逐一进行阐述。

(1) “证件绑定”模块

读者要想通过微信公共平台获得借阅查询和催还提醒等服务,必须将一卡通号和微信号进行绑定。读者在进行绑定卡号操作时,需登录图书馆微信服务平台,点击菜单项“绑定卡号”。此时,系统会自动回复消息“点击此处您将绑定一卡通号”。这个功能是在主程序中实现的,相关的部分代码如下所示:

switch($postObj->EventKey)

{

case "CLICK_BANGDING":

$textTpl = "

";

$contentStr = " <a href="http://lib.ustl.edu.cn/weixin/bangdng.php?useropenid=".$postObj->FromUserName."">点击此处您将绑定一卡通号</a>";

$resultStr = sprintf($textTpl, $postObj->FromUserName, $postObj->ToUserName, $time, $contentStr);

echo $resultStr;

break;

case "CLICK_JIEBANG":

……

}

在主程序中通过switch语句的case值跳转到相应的任务处理模块。Case值在自定义菜单时设定好。请求消息的格式为XML,其中,字段记录了请求的消息类型Text(文本)。读者继续点击该消息内容时,系统由主页面跳转到“卡号绑定”页面bangdng.php,同时将读者OpenID作为参数传递给该页面。

在“卡号绑定”页面bangdng.php中,有两个输入框允许读者分别输入一卡通号和OPAC密码。当读者点击“绑定”按钮时将跳转到卡号绑定处理页面bangdng_OK.php进行相关操作。此时,读者OpenID、读者卡号和OPAC密码也作为参数传递给页面bangdng_OK.php进行处理。读者只有在输入正确的证件号和OPAC密码后才能通过汇文系统认证,并成功将证件号和读者OpenID绑定。绑定卡号程序页面bangdng_OK.php部分代码如下:

……

$useropenid=$_POST[tb_useropenid];

$tb_userid=trim($_POST[tb_userid]);

……

$query="select * from READER where CERT_ID=:CERT_ID and PASSWORD=:password";$statement=oci_parse($dbconn,$query);

$CERT_ID=trim($_POST[tb_userid]);

$password=strtoupper(md5($_POST[tb_pass]));

oci_bind_by_name($statement,":CERT_ID",$CERT_ID);

oci_bind_by_name($statement,":password",$password);

oci_execute($statement);

$r = oci_execute($statement, OCI_DEFAULT);

$row = oci_fetch_all($statement,$result);

if($row<>1){

echo "";

oci_close($dbconn);

exit;

}

……

$query=mysql_query("insert into tb_bangding(tb_id,tb_userid,tb_userpass,tb_openid,

tb_createtime)values($num,'$CERT_ID','$password','$useropenid','$tb_date')",$conn);

if($query==true){

$_SESSION["tb_userid"]=$CERT_ID;

echo "";

exit;

}else{

echo "";

exit;

}

oci_close($dbconn);//关闭oracle conn

?>

在这一部分程序中,系统通过POST方式分别获得传递参数读者OpenID、读者卡号和OPAC密码,然后根据读者卡号和OPAC密码访问汇文系统读者表READER,判断该读者是否是本馆读者。如果该读者信息验证通过,还需判断该读者是否已经绑定证件号。若没有绑定证件号,则将读者OpenID、读者卡号、OPAC密码和绑定时间等信息通过Insert语句保存到MySQL数据库中的表tb_bangding中,将读者OpenID和读者卡号进行绑定。然后,将是否成功绑定的结果传递给读者。在读者OpenID与卡号成功绑定后,读者就可以进行借阅查询、违章查询等操作,或者能够收到借还提醒、催还提醒等通知。

(2)“借阅查询”模块

读者在成功绑定卡号后,若想查询当前借阅明细时,将不再需要输入卡号和密码,而只要点击菜单项“借阅查询”即可。此时,读者会收到文本类型回复消息“点击此处您将查询当前借阅情况”。读者继续点击该消息就会看到具体的借阅明细。在主程序中实现自动回复“点击此处您将查询当前借阅情况”的部分代码如下:

switch($postObj->EventKey)

{……

case " CLICK_QUERY":

$textTpl = "

";

$contentStr = " <a href="http://lib.ustl.edu.cn/weixin/jieyuechaxunll.php?

useropenid=".$postObj->FromUserName."">点击此处您将查询当前借阅情况 </a>";

$resultStr = sprintf($textTpl, $postObj->FromUserName, $postObj->ToUserName, $time, $contentStr);

echo $resultStr;

……}

当读者继续点击消息内容时将跳转到借阅查询页面jieyuechaxunall.php,其传递参数为读者OpenID号。

在借阅查询页面jieyuechaxunll.php中,系统首先获得传递参数读者OpenID号,然后根据读者OpenID查询表tb_bangding获取一一对应的读者一卡通号tb_userid。然后再根据读者一卡通号tb_userid从汇文系统的借阅表lend_lst、复本表item和marc表获取该读者的当前借阅明细,并通过循环语句依次呈现给读者。其中,读取借阅明细的SQL语句如下所示:

SELECT m.M_TITLE, L.LEND_DTE, L.NORM_RT_DATE ,m.M_AUTOR ,

m.M_PUBLSHER FROM LEND_LS L, ITEM i, MARC m

WHERE ((L.PROP_NO = i.PROP_NO) AND( i.MARC_REC_NO = m.MARC_REC_NO) AND (L.CERT_ID = :CERT_ID)) ORDER BY L.NORM_RET_DATE;

借阅查询运行结果如图2所示。

图2 借阅查询

违章查询具体实现过程与借阅查询类似,这里不再赘述,其运行效果如图3所示。

图3 违章查询

(3)“借还提醒”模块

微信公共平台在为读者提供提醒类型服务等属于单向的主动类型服务时,需要通过高级接口中的客服接口才能实现。开发者在调用客服消息接口时,通过POST一个JSON数据包来发送消息给普通用户。具体实现过程如下:

(1)根据微信公众账号APPID和APPSECRET获取access_token;

(2)通过access_token,生成推送不同的客服消息到不同的微信用户客户端所调用的URL地址,具体语句如下:

$send_msg_url ="https://api.weixin.qq.com/cgi-bin/message/custom

/send?access_token=".$access_token;

(3)通过while循环语句从数据表tb_bangding中依次获取证件号,然后根据该证件号从汇文系统相应的借阅表lend_lst、复本表item和marc表获取今日借阅图书数量。如果今日借阅图书数量大于0,例如2本,则将给该读者发送图文消息,其中文字信息为“您今日共借阅2本图书,祝您阅读愉快。”。然后,再判断下一位读者今日借阅信息,这样不断循环,直到处理完表tb_bangding中所有记录数据。循环给相关读者推送消息的部分代码如下所示:

……

$sql=mysql_query("select * from tb_bangding ",$conn);

while ($info = mysql_fetch_array($sql)) {

$CERT_ID=$info[tb_userid];//依次获取证件号

$useropenid=$info[tb_openid];

$query="SELECT m.M_TITLE, L.LND_DATE, L.NORM_RET_DTE FROM

LEND_LST L, ITM i, MARC m WHERE L.PROP_NO = i.PRP_NO AND

i.MARC_RC_NO = m.MARC_RC_NO AND (L.CERT_ID =:CERT_ID)

and (trunc(to_date(L.LEND_DATE,'YYYY-MM-DD HH24:MI:SS'), 'D')-

trunc(SYSDATE,'D')=0)";

$statement=oci_parse($dbconn,$query);

oci_bind_by_name($statement,":CERT_ID",$CERT_ID); //执行语句

oci_execute($statement);

$r = oci_execute($statement, OCI_DEFAULT);

$row = oci_fetch_all($statement,$results);

if($row>0){

$data="您今日共借阅".$row."本图书,祝您阅读愉快。";

$msg['touser'] =$useropenid;

$msg['msgtype'] = 'news';

$msg['news']= array('articles'=> array(

array(

"title"=>urlencode("图书借阅通知"),

"description"=>urlencode("$data"),

"picurl"=>"http://lib.ustl.edu.cn/weixin/images//jieyue002.jpg",

url"=>"http://lib.ustl.edu.cn/weixin/booklnd.php?

useropenid=".$useropenid)));

$result =https_request($send_msg_url, urldecode(json_encode($msg)));

p($result);

…?>

向用户发送数据为JSON数据包,参数touser为读者OpenID;参数msgtype指定消息类型,本例为图文news;参数title为消息标题;参数description为消息内容;参数url为消息链接文件,本例为booklnd.php。参数picurl为消息背景图片。借阅提醒运行结果如图4所示。当点击“查看全文”时,将运行程序booklnd.php,将显示当日详细借阅图书的信息,其运行效果图如图5所示。

图4 借阅提醒运行结果

图5 当日详细借阅图书的信息

还书提醒与借阅提醒实现过程类似,这里不再赘述,其运行结果如图6所示。当点击图6中的“查看全文”时,将运行程序bookreturn.php,将显示当日详细还书的信息,其运行效果图如图7所示。

图6 还书提醒运行结果

图7 当日详细归还图书的信息

(4)“违章提醒”模块

当本馆管理人员通过汇文系统对读者进行违章处罚时,为了能够及时通知读者,使其知道自己在什么时候违反了图书馆的哪一条规定,本馆微信平台推出了违章提醒功能。该项功能仍然通过微信客户消息接口来实现。违章提醒功能实现过程与借阅提醒功能实现过程类似。首先,根据微信公众账号APPID和APPSECRET获取access_token,并根据access_token生成推送不同的客服消息到不同的微信用户客户端所调用的URL地址。然后,通过while循环语句从数据表tb_bangding中依次获取证件号,根据该证件号从汇文系统相应的违章代码库violate_code 和读者违章库reader_volt_lst获取当日违章记录。在php中访问汇文系统的SQL语句如下:

$query="SELECT .CERT_ID,r.punish_date,r.location_f,r.fine_date,r.froz_end_date,r.resp_wkr,

r.real_fine_amt,v.volt_nameFROM violate_code v ,reader_volt_lst r where

(r.CERT_ID =:CERT_ID) and v.volt_code =r.volt_code and trunc(to_date( r.punish_date,'YYYY-MM-DD HH24:MI:SS'),'D')-

trunc(SYSDATE,'D')=0) order by r.punish_date desc ";

如果该读者今日有违章记录,则本模块将给该读者发送1条图文消息,如图8所示。然后,再判断表tb_bangding中下一位读者今日是否有违章记录,这样不断循环直到处理完表tb_bangding中所有绑定读者的记录数据。

图8 违章提醒运行效果

读者在图8中点击“查看全文”时,将看到违章具体内容,如图9所示。

图9 违章明细

(5) 任务处理模块实现时需要注意的问题

性能问题是任务处理模块实现时出现的主要问题。微信服务器规定请求的响应时间为5 秒,因此针对微信消息的自动回复必须在5 秒之内完成,否则微信服务器将断开连接,导致本次消息回复失败。例如“借阅查询”模块是通过访问汇文系统后台oracle数据库相关数据表,通过循环语句依次获取各个记录并以页面形式呈现给读者,页面的响应时间会受到网络条件等因素的影响而存在不确定性。页面结构过于复杂时,也会增加页面分析的难度,造成响应超时,从而造成读者无法成功接收消息或需等待较长时间,影响体验效果,降低微信粘度。因此,这部分程序在实现时应通过优化SQL语句、减少交互次数、节省系统资源等措施保障系统性能。

4结语

本文对图书馆微信服务应用的设计方案和具体实现进行了详尽的研究。辽宁科技大学图书馆微信公众平台的成功建设,实现了图书馆汇文系统、选座系统、门禁系统等自动化系统和各业务数据库、微信的对接与集成,将图书馆服务无缝延伸到微信上,从实践上进行了有益的尝试,提供了微信在图书馆应用的具体案例,并为后续任务模块的建设与完善积累了宝贵的设计和开发经验。下一步,本馆将充分利用微信公众平台的开发模式, 扩大馆情通报的范畴与深度,继续拓展读者服务,从而为读者带来更好的体验。

参考文献:

[1] 微信[EB/OL].[2015-07-17].http://baike.baidu.com/subview/51 17297/15145056.htm.

[2] 马大艳.高校图书馆微信服务现状分析及发展对策——基于“985工程”大学图书馆的调研[J].图书馆工作与研究,2015(3):33-37.

[3] 张蓓,窦天芳,张成昱 ,李洁芳.开发模式下图书馆微信公众平台服务的设计与实现[J]. 现代图书情报技术,2014(1):81-97.

[4] 孔云,廖寅,资芸,等.基于微信公众账号的图书馆移动信息服务研究[J]. 情报杂志,2013(9):167-170.

[5] 李松辉,侯志江.图书馆微信公众号服务平台的设计与开发[J].信息系统工程,2015(2):32-39.

[6] 黎邦群.基于微信公众平台的图书借还提醒服务[J]. 惠州学院学报,2014(12):64-69.

[7] 微信公众平台开发者文档[J/OL].[2014-06-05].http://mp.weixin.qq.com/wiki/ home/index.html.

(责任编辑:朱爱瑜)

Application and Development of WeChat Platform in Library Service ——A Case of Library of University of Science and Technology Liaoning

CHEN Zuo-xin1, WANG Yu-xiang1, LIU Da-peng2

(1.University of Science and Technology Liaoning, Anshan114051, China;2.Qianshan Scenic Area Administration,Anshan114045, China)

Abstract:With the fast development of WeChat platform in library service, the ordinary WeChat service functions have been unable to meet the diverse demands of readers. This paper, taking the library of University of Science and Technology Liaoning as an example, puts forward to use the WeChat platform interfaces to carry out the development by opening source code,integrating the library service such as OPAC search, remind service, check violation records into WeChat platform in conjunction with the technology of PHP, Oracle, MySQL, XML, Javascript, and using library resources and services in the form of one-key operation.This application and development contributes to the save of cost in library resource construction and improve the level of library information service.

Key words:WeChat; WeChat platform; Mobile service; PHP; service innovation

作者简介:陈作新,男,副研究馆员。

收稿日期:2015-10-20

基金项目:辽宁省高等学校图工委基金项目(L2015008)

中图分类号:G250.7

文献标识码:A

文章编号:1006-1525(2016)03-0053-08

猜你喜欢
服务创新微信平台微信
微信
汽车维修服务中心发展连锁经营模式的相关建议
新媒体时代微信舆情的监控策略研究
大数据时代下图书馆的服务创新与发展
基于微信平台的高中物理“翻转课堂”教学初探
油田矿区物业服务管理理念的研究及分析
科技期刊全媒体出版实施方案探析
微信
微信