佘靜濤(浙江工業大學圖書館)
基于微信的圖書轉借服務就是:當一個讀者不想去圖書館還書且另一個讀者剛好想看這本書時,借出方利用轉借功能將圖書信息生成二維碼, 借入方打開微信端掃一掃即可借走此書。[1]通過這種借閱方式,不僅使得讀者大為方便,同時也減輕了圖書館館員的工作壓力,極大地提高了圖書的利用率。
目前,基于微信的圖書轉借系統已經進入實踐領域。2015年,圖創軟件自主研發了國內第一套圖書轉借系統,該系統整合圖書館的業務系統,內嵌圖書館微信公眾號、門戶和App,海南大學、云南大學都是該系統的用戶;[2]2016年5月,“浙江圖書館圖書轉借服務——隨時隨地借書體驗”推出。[3]從圖書轉借系統的研究成果來看,陳靖認為圖書轉借服務這種新型圖書借閱制度的優勢在于:節約讀者的時間、解決讀者的不便、促進讀者之間知識共享、促進傳統圖書館業務優化升級;[4]李保紅對圖書館轉借系統產生的背景、如何應用以及所產生的功能效益進行了描述;[1]豆洪青等認為轉借服務是傳統圖書館借閱服務線上線下融合的體現。[5]但是針對微信公眾平臺的圖書轉借系統設計與實現的相關研究幾乎沒有。
本研究以浙江工業大學圖書館為實踐對象,利用其現有的圖書信息管理系統,充分考慮讀者對圖書轉借服務的需求,設計基于微信的圖書轉借系統。
浙江工業大學圖書館基于微信的圖書轉借系統經過前期大量的調研與準備工作,實現的主要功能模塊如下。① 系統登錄及驗證模塊。驗證讀者身份,該模塊用以確保讀者賬號的合法性。② 讀者借閱信息模塊。讀者可以在微信客戶端上通過點擊菜單或者輸入關鍵字,獲取自己的圖書借閱信息,并通過鏈接直接跳轉到圖書的發布轉借和轉借他人的頁面,也可以使用瀏覽器登錄圖書轉借系統進行相關操作。③ 已發布的圖書轉借信息查看模塊。讀者可以查看其他讀者已發布的圖書轉借信息,可以使用題名和責任者作為檢索詞對已發布的圖書進行檢索,同時支持語音錄入檢索詞。④ 圖書轉借信息發布模塊。讀者可以將自己借閱的圖書信息進行發布,發布時需要提供電話、QQ號或者微信號以便其他讀者聯系。⑤ 圖書轉借二維碼生成模塊。圖書借出人在面對面轉借時,將自己的賬號、圖書的館藏號等信息生成二維碼供借入人掃碼。⑥ 微信掃二維碼借書模塊。圖書借入人在當面轉借時,使用微信掃碼功能識別二維碼并借入圖書,轉借結果語音提示。⑦ 圖書借閱規則模塊。保證圖書轉借系統的借閱規則與圖書館借閱規章制度一致,保障圖書使用的公平性。
微信公眾平臺提供了強大的消息API接口和微信JS-SDK網頁開發工具包。使用消息API接口,開發者可以通過微信公眾平臺獲取微信客戶端發送的文字、圖片、音頻和視頻消息,根據不同消息的響應函數將處理過的數據反饋給微信客戶端。使用 JS-SDK網頁開發工具包,開發者可借助微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時可以直接使用微信分享、掃一掃、卡券、支付等功能為用戶提供更優質的網頁體驗。[6]浙江工業大學圖書館基于微信的圖書轉借系統不僅需要使用微信客戶端發送、接收消息,而且需要使用微信的錄音、語音識別、掃一掃等諸多功能。因此,本研究確立了利用微信公眾平臺的消息API和JS-SDK網頁開發工具包實現圖書轉借系統的技術路線。
經過分析圖書轉借系統的功能需求以及確定了系統的技術路線后,本文制定了系統的架構(見圖1),明確了系統的設計思路。

圖1 圖書轉借系統架構
圖書轉借系統部署在微信服務平臺服務器上,通過微信服務器和圖書館信息管理系統進行通信,系統不僅能實現對微信公眾平臺消息API接口和JS-SDK網頁開發工具包的調用,同時也可實現對圖書館信息管理系統接口的調用。
系統采用MVC三層架構,即模型(Model)、視圖(View)、控制器(Controller)。核心部分的設計思路如下。
(1)系統調用微信公眾平臺的JS-SDK網頁開發工具包和百度的智能語音合成、人臉識別接口,實現系統的圖書轉借掃碼、語音檢索、語音提示和用戶綁定等功能。調用Google Zxing 2.0開源類庫,[7]實現圖書轉借二維碼的生成功能。
(2)系統需要調用的圖書館信息管理系統相關接口主要有三個。① 讀者借閱信息接口。通過該接口,開發者可以獲取讀者借閱圖書的信息,包括書的題名、ISBN號、出版社、館藏號、借閱時間、應歸還時間等。② 讀者信息接口。通過該接口,開發者可以獲取讀者信息,包括讀者的學工號、聯系方式、姓名、照片等。③ 圖書轉借服務接口。通過該接口,開發者提供對應參數實現圖書的轉借服務。接口需要判斷圖書能否被轉借,保證圖書轉借系統的借閱規則與圖書館借閱規則一致,并返回出錯信息。
(3)圖書轉借系統需要與圖書館信息管理系統數據保持同步,同步的數據包括讀者信息和圖書的借閱信息。其中,讀者信息用以保證圖書借出人和借入人的賬號合法權限,借閱信息用以保證已發布的圖書轉借信息的時效性。
(4)圖書轉借系統需要將圖書館賬號與微信公眾號的OpenID(每個用戶對每個公眾號有一個唯一的OpenID)關聯起來,并將關聯信息存入數據庫,以避免在使用圖書轉借系統時反復輸入圖書館賬號。
(5)讀者使用微信客戶端與系統交互,系統首先調用微信公眾平臺的接收消息接口接收讀者消息,消息中包含了讀者的OpenID和關鍵詞等信息,然后系統根據關鍵詞調用響應函數,由響應函數處理讀者的請求,最后系統調用微信公眾平臺的發送消息接口,將處理好的數據返回給讀者。
(6)讀者可以使用微信瀏覽器或者普通瀏覽器登陸圖書轉借系統,系統根據瀏覽器自帶的User Agent字符串,判斷讀者使用的瀏覽器類型。如果是微信瀏覽器,系統會自動使用微信網頁授權[8]的方式判斷用戶身份后登錄系統;如果是普通瀏覽器,則需要讀者輸入賬號和密碼登錄系統。與微信瀏覽器相比,普通瀏覽器無法調用手機系統的大部分能力。
(7)系統將圖書的信息、當前借閱人的信息以及提供轉借服務的程序地址等信息置于二維碼中,借入人可以通過使用微信掃一掃功能實現轉借。
(8)為保障圖書使用的公平性,系統數據庫保存讀者的轉借(借出)記錄,保證一年之內同一讀者對同一圖書的轉借(借出)次數不超過2次。
浙江工業大學圖書館圖書轉借系統在充分考慮了服務器操作系統兼容性問題的基礎上,利用微信公眾平臺的消息API接口、JS-SDK網頁開發工具包和Google Zxing 2.0開源類庫,調用百度的智能語音合成、人臉識別等接口,使用Java編程語言和Hibernate數據庫框架開發圖書轉借系統,系統的數據庫采用MySQL關系型數據庫,Web頁面使用HTML5和AJAX技術。
根據系統功能需求和系統設計思路,系統的數據模型由JSP文件實現,主要負責讀寫數據庫,為系統提供數據源。系統的視圖使用HTML5及jQuery技術實現,主要負責數據的呈現以及與用戶的交互。控制器由一個采用AJAX技術的JS文件實現,主要負責系統的邏輯處理。系統的工作流程如圖2所示。

圖2 圖書轉借系統工作流程圖
用戶將圖書館賬號與微信公眾號的OpenID綁定后,可以使用微信瀏覽器或者普通瀏覽器登錄圖書轉借系統。系統支持用戶綁定、發布圖書轉借信息、查看讀者借閱信息、查找已發布的圖書、將圖書轉借他人以及使用微信掃碼借書等。其中,用戶綁定、生成圖書轉借二維碼和微信掃碼借書功能是系統實現的重點和難點。
(1)用戶綁定功能。為了確保轉借圖書由本人操作,用戶綁定的時候不僅需要驗證用戶圖書館賬戶的合法性,同時需要對用戶進行人臉識別,因此在綁定的過程中引入了百度的人臉識別技術,具體的實現過程如下。① 系統的數據庫中建立一個圖書館賬號與微信公眾號OpenID的映射表“binduser”以保存微信公眾號綁定用戶的信息(見表1)。② 編寫實現用戶綁定的數據模型userBind.jsp,程序的流程見圖3。③編寫用戶綁定信息的同步程序,同步程序是一個在系統啟動時就執行的多線程程序,每隔2小時執行一次,負責將用戶綁定映射表信息與圖書館信息管理系統中的用戶信息進行同步。

表1 用戶綁定映射表“binduser”

圖3 綁定程序流程圖
(2)生成圖書轉借二維碼。系統調用Google Zxing 2.0開源類庫實現生成圖書轉借二維碼的功能,實現的核心代碼如下。
/*“encode”函數生成帶Logo和書名的圖書轉借二維碼,參數“text”包括轉借服務程序地址、借出人的信息和圖書的信息,“logopath”是Logo圖片的地址,“title”是圖書的題名,“width”和“height”是生成二維碼圖片的寬和高,“response”是個數據流對象,負責在瀏覽器上顯示二維碼*/
public static boolean encode (String text,String logopath,String title,int width,int height,HttpServletResponse response) {
try{…
BufferedImage image=new BufferedImage (width, height,BufferedImage.TYPE_INT_RGB);
Hashtable hints=new Hashtable();//用于配置矩陣參數
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");//設置二維碼內容所使用編碼
hints.put(EncodeHintType.ERROR_CORRECTION,ErrorCorrectionLevel.M);//設置二維碼容錯級別
BitMatrix bitMatrix=new MultiFormatWriter().encode (text,BarcodeFormat.QR_CODE,width,height,hints);//生成二維碼矩陣
image=toBufferedImage(bitMatrix); //?toBuffered-Image函數利用矩陣數據創建圖片Graphics2Dgs=image.createGraphics() ;
Imageimg=ImageIO.read(newFile(logpath)) ;
gs.drawImage(img,78,78,40,40,null);//將 logo 圖片繪制在二維碼圖片中
Colorco=newColor(195,195,195) ;
Fontfo=newFont("宋體 ",Font.PLAIN,12) ;
gs.setColor(co) ;
gs.setFont(fo) ;
if(getStringLenth (title) >=9) {
gs.drawString(title.substring(0,putStringLenth(8,title))+"...",38.0F,177.0F);}//將圖書題名繪制在二維碼中
else{gs.drawString(title,38+((12-getStringLenth(title)) /2*10) ,177.0F) ;}
gs.dispose() ;
img.flush() ;
ImageIO.write(image,"png",response.getOutputStream());returntrue;//將圖片數據寫入到數據輸出流對象}catch (Exceptione) {…}}
(3)微信掃碼借書。① 系統的數據庫中建立一個記錄讀者圖書轉借記錄的表“exchangebooklog”,通過該表實現一年之內同一讀者對同一圖書的轉借(借出)次數不能超過2次的圖書轉借規則,避免圖書轉借過程中產生的糾紛,表結構見表2。② 系統通過調用微信公眾平臺的JS-SDK網頁開發工具包使用微信掃一掃的功能,該功能使系統能夠獲取圖書轉借二維碼中包含的轉借服務程序地址、借出人的信息和圖書的信息并直接跳轉到該地址。③ 轉借服務程序利用微信網頁授權機制獲取掃碼人的OpenID,根據OpenID在用戶綁定映射表中得到掃碼人圖書館賬號信息。利用二維碼中包含的信息,調用圖書館信息管理系統的轉借服務接口,完成圖書轉借服務。完成圖書轉借服務后系統需要更新數據庫中已發布圖書的相關信息。④ 編寫已發布的圖書轉借信息的同步程序,同步程序是一個在系統啟動時就執行的多線程程序,程序每隔2小時執行一次,負責將已經通過其他途徑歸還的圖書信息從圖書轉借系統數據庫中刪除,以保證發布的圖書轉借信息的時效性。

表2 讀者圖書轉借記錄表“exchangebooklog”
經過檢測,圖書轉借系統的運行結果符合浙江工業大學圖書館規章制度中有關圖書借閱的相關規定,具體的測試結果見表3。

表3 圖書轉借系統測試結果
本文介紹了浙江工業大學圖書館圖書轉借系統,旨在利用移動通信的便利性為讀者提供一種新的借閱服務模式,同時也希望與其他高校圖書館分享圖書轉借系統的設計與實現方法,讓更多高校圖書館利用微信公眾平臺,搭建自己的圖書轉借系統。