蔡龍 劉星宇
摘? 要:由于傳統(tǒng)B/S端教務(wù)系統(tǒng)的局限性和安全問題,因此將移動(dòng)互聯(lián)網(wǎng)技術(shù)與傳統(tǒng)B/S型信息化管理系統(tǒng)相結(jié)合進(jìn)行了研究,通過二次開發(fā)微信公眾號(hào)與強(qiáng)智教務(wù)系統(tǒng)進(jìn)行數(shù)據(jù)交互,更好地服務(wù)在校師生,應(yīng)對(duì)學(xué)習(xí)生活中的問題,如課表查詢、生活繳費(fèi)等功能。系統(tǒng)具有便捷性,穩(wěn)定性和擴(kuò)展性,因此能為用戶提供更快,更廣,更準(zhǔn)確的教務(wù)信息,為進(jìn)一步開發(fā)其他功能奠定基礎(chǔ)。
關(guān)鍵詞:教務(wù)系統(tǒng);微信;B/S
中圖分類號(hào):TP311? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2021)18-0005-04
Abstract: Because of the limitations and security problems of traditional B/S-side educational administration system, this paper studies the combination of mobile internet technology and traditional B/S-type informatization management system. Through the two development of WeChat official account and making data exchange with the Qiangzhi educational administration system, it can better serve the teachers and students in school, and deal with the problems in study and life, such as timetable inquiry, living payment and other functions. The system has convenience, stability and expansibility, so it can provide users with faster, wider and more accurate educational administration information, and lay the foundation for further development of other functions.
Keywords: educational administration system; WeChat; B/S
0? 引? 言
隨著互聯(lián)網(wǎng)科技的發(fā)展程度的提高,移動(dòng)端互聯(lián)網(wǎng)技術(shù)逐漸成為主流。自從騰訊推出微信之后,微信公眾號(hào)與微信小程序發(fā)展迅速,以其無須下載,功能齊全,即開即用,界面友好,操作簡(jiǎn)便等眾多優(yōu)勢(shì)迅速占領(lǐng)了許多用戶的移動(dòng)端應(yīng)用市場(chǎng),也成了人們工作和生活中不可或缺的工具之一,用來支付或辦公聊天。人們也更趨向于使用微信端來獲取信息。
目前國(guó)內(nèi)常用的教務(wù)系統(tǒng)平臺(tái)如正方教務(wù)管理系統(tǒng),強(qiáng)智教務(wù)管理系統(tǒng),青果教務(wù)管理系統(tǒng)等。我校教務(wù)系統(tǒng)仍然為傳統(tǒng)的B/S模式,此模式限制諸多,例如,在手機(jī)端信息顯示不完整、查詢不便、網(wǎng)址不容易記等,導(dǎo)致大學(xué)生無法及時(shí)獲取到學(xué)校發(fā)布的最新消息,如課表,成績(jī)或者社考報(bào)名等,造成了諸多不便利,且便利性和安全性都存在一定的隱患。
因此將移動(dòng)互聯(lián)網(wǎng)技術(shù)與傳統(tǒng)B/S型信息化管理系統(tǒng)相結(jié)合,必然以及是一種新的發(fā)展趨勢(shì),因此,本文旨在通過構(gòu)建強(qiáng)智教務(wù)系統(tǒng)與微信端的數(shù)據(jù)交互,從而實(shí)現(xiàn)只需要使用手機(jī)微信即可進(jìn)行成績(jī)查詢、生活繳費(fèi)、課表通知等一系列日常操作,更好地服務(wù)在校大學(xué)生,幫助大學(xué)生更快更好地融入大學(xué)生活、應(yīng)對(duì)大學(xué)日常生活中所遇到的煩惱和疑問。
1? 可行性分析
隨著微信客戶群的持續(xù)增長(zhǎng)和微信公眾平臺(tái)接口的開發(fā),可利用微信公眾平臺(tái)實(shí)現(xiàn)的功能越來越多,現(xiàn)有許多服務(wù)商均推出了微信端,如美團(tuán)外賣小程序,可實(shí)現(xiàn)使用微信即可點(diǎn)外賣、T3出行小程序可實(shí)現(xiàn)使用微信打車出行、建設(shè)銀行微信公眾號(hào)服務(wù)號(hào)可實(shí)現(xiàn)微信快捷查詢銀行卡信息等,提高了服務(wù)質(zhì)量,節(jié)約了服務(wù)成本。
在校園服務(wù)這一塊,許多學(xué)校組織也開通了相應(yīng)的公眾號(hào),如湖南工程職院開通了微信公眾號(hào),發(fā)布一些校園新聞,資訊等信息,但是僅提供了新聞資訊,并未開通校園服務(wù),如課表查詢,成績(jī)查詢,考試信息等學(xué)生個(gè)人用戶信息。
如果學(xué)校要發(fā)布一條通知,需要先下達(dá)至輔導(dǎo)員處,輔導(dǎo)員再轉(zhuǎn)達(dá)至班級(jí)群內(nèi),在此環(huán)節(jié)中,如果傳達(dá)不及時(shí)或不準(zhǔn)確,均會(huì)導(dǎo)致通知不到位等情況發(fā)生。
1.1? 平臺(tái)優(yōu)勢(shì)
微信公眾平臺(tái)首先是一個(gè)開放、免費(fèi)的平臺(tái),且官方提供了完整的開發(fā)文檔,因此提高了開發(fā)效率,節(jié)省了開發(fā)成本。
微信公眾號(hào)是在微信基礎(chǔ)平臺(tái)上擴(kuò)展的功能模塊,通過這一平臺(tái),可以方便地與特定群體實(shí)現(xiàn)文字、圖片、語音的全方位溝通、互動(dòng)。微信公眾平臺(tái)的傳播方式是一對(duì)多的傳播,直接將消息推送到手機(jī),因此達(dá)到率和被觀看率幾乎是100%。
1.2? 安全優(yōu)勢(shì)
本系統(tǒng)數(shù)據(jù)是基于用戶授權(quán)獲取教務(wù)系統(tǒng)課表成績(jī)數(shù)據(jù),基于學(xué)校開放數(shù)據(jù)獲取電費(fèi)信息,系統(tǒng)僅有查詢權(quán)限,不存在數(shù)據(jù)篡改等危險(xiǎn)操作,提升了整體的安全性,避免了被外界攻擊的可能性。
1.3? 開發(fā)優(yōu)勢(shì)
微信公共平臺(tái)會(huì)為每個(gè)用戶對(duì)每個(gè)公眾號(hào)生成一個(gè)唯一的OpenID,系統(tǒng)可根據(jù)此直接判斷用戶,無須注冊(cè)登錄,并且可獲取用戶基本信息。開發(fā)者可通過公眾號(hào)消息會(huì)話形式與用戶進(jìn)行交互。并且在公眾號(hào)內(nèi)提供網(wǎng)頁形式服務(wù),網(wǎng)頁授權(quán)可獲取用戶基本信息,開發(fā)者可在網(wǎng)頁上通過JavaScript代碼使用微信原生功能的工具包,開發(fā)者可以使用它在網(wǎng)頁上錄制和播放微信語音、微信分享等許多能力。gzslib2022040510312? 框架設(shè)計(jì)
公眾號(hào)端:用戶通過微信公眾號(hào)會(huì)話或通過點(diǎn)擊菜單欄查詢基礎(chǔ)業(yè)務(wù)邏輯,亦可通過點(diǎn)擊進(jìn)入系統(tǒng)網(wǎng)頁,可視化的管理用戶基本信息,查看課表成績(jī)等。公眾號(hào)端建立起了作為用戶與服務(wù)器端溝通的橋梁。
服務(wù)器端:服務(wù)器端是關(guān)鍵代碼層,主要體現(xiàn)系統(tǒng)的業(yè)務(wù)流程以及業(yè)務(wù)邏輯等。在登錄系統(tǒng)、成績(jī)系統(tǒng)、課表系統(tǒng)、校園信息系統(tǒng)主要模塊之下,要根據(jù)每個(gè)系統(tǒng)相關(guān)的業(yè)務(wù)需求進(jìn)行邏輯處理以及判斷條件的定義。模塊之間的數(shù)據(jù)傳輸體現(xiàn)了業(yè)務(wù)流程。
數(shù)據(jù)源端:此層為系統(tǒng)主要的數(shù)據(jù)來源,如電費(fèi)信息來源于學(xué)校開放的電費(fèi)查詢頁面,成績(jī)和課表信息來自學(xué)校的強(qiáng)智教務(wù)系統(tǒng),通過用戶授權(quán)提供賬號(hào)密碼,服務(wù)器以代碼的形式訪問數(shù)據(jù)源端,獲取用戶所需數(shù)據(jù),并清晰的返回給用戶。
系統(tǒng)總體框架如圖1所示。
3? 設(shè)計(jì)實(shí)現(xiàn)
系統(tǒng)主要使用流程如下:學(xué)生關(guān)注微信公眾號(hào),發(fā)送綁定或點(diǎn)擊菜單欄個(gè)人中心中的綁定,即可進(jìn)入個(gè)人信息綁定頁面,用戶輸入信息綁定后,服務(wù)器將根據(jù)用戶所提供的的信息去獲取教務(wù)系統(tǒng)的信息,實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,用戶可通過發(fā)送關(guān)鍵詞,如:“課表”,微信公眾號(hào)將用戶信息回調(diào)至服務(wù)器后端,后端接收到用戶消息后使用XML解析消息,獲取消息內(nèi)容,根據(jù)消息內(nèi)容分析處理,對(duì)業(yè)務(wù)進(jìn)行處理,將處理后的結(jié)果以XML格式使用POST請(qǐng)求給微信服務(wù)器,微信服務(wù)器接收到請(qǐng)求后,將消息解析后轉(zhuǎn)發(fā)給用戶,以此實(shí)現(xiàn)用戶信息的查詢,如圖2所示。
3.1? 微信公眾平臺(tái)接入
由于此系統(tǒng)依賴于微信公眾號(hào)進(jìn)行開發(fā),因此需要接入微信公眾平臺(tái)。
開發(fā)者接入微信公眾平臺(tái)需按照以下步驟完成:
(1)填寫服務(wù)器配置。登錄微信公眾平臺(tái)官網(wǎng)后,在公眾平臺(tái)官網(wǎng)的開發(fā)-基本設(shè)置頁面,勾選協(xié)議成為開發(fā)者,點(diǎn)擊“修改配置”按鈕,填寫服務(wù)器地址(URL)、Token和EncodingAESKey,其中URL是開發(fā)者用來接收微信消息和事件的接口URL。Token可由開發(fā)者可以任意填寫,用作生成簽名(該Token會(huì)和接口URL中包含的Token進(jìn)行比對(duì),從而驗(yàn)證安全性)。EncodingAESKey由開發(fā)者手動(dòng)填寫或隨機(jī)生成,將用作消息體加解密密鑰。
(2)驗(yàn)證消息的確來自微信服務(wù)器。開發(fā)者對(duì)公眾平臺(tái)回調(diào)的signature參數(shù)進(jìn)行驗(yàn)證。如果確認(rèn)是GET請(qǐng)求來此微信公眾平臺(tái),則直接返回echostr參數(shù)的內(nèi)容,開發(fā)接入成功,否則接入失敗。校驗(yàn)步驟:首先將token,timestamp,nonce三個(gè)值進(jìn)行字典序排序,然后將三個(gè)參數(shù)字符串拼接成一個(gè)字符串后進(jìn)行sha1加密最后開發(fā)者獲得加密后的字符串可與signature比對(duì),確認(rèn)該請(qǐng)求來源于微信
在本系統(tǒng)中,使用Django開源框架進(jìn)行開發(fā),因此驗(yàn)證消息代碼為:
@view.get('/wx/main')
async def wx_main(signature:str,timestamp:str,nonce:str,echostr:str):
sign = hashlib.sha1("".join(sorted(['Token',timestamp,nonce])).encode('UTF-8')).hexdigest()
return HTMLResponse(content=echostr if sign == signature else "error")
(3)依據(jù)接口文檔實(shí)現(xiàn)業(yè)務(wù)邏輯。用戶通過向公眾號(hào)發(fā)送消息或點(diǎn)擊自定義菜單或進(jìn)行微信支付等情況時(shí),微信服務(wù)器會(huì)根據(jù)開發(fā)者填寫的網(wǎng)址進(jìn)行事件回調(diào),將消息推送給開發(fā)服務(wù)器,開發(fā)者根據(jù)需求業(yè)務(wù)邏輯進(jìn)行響應(yīng),如回復(fù)文字或圖片。公眾號(hào)收到用戶消息后,公眾號(hào)會(huì)將用戶微信號(hào)進(jìn)行加密,最終得到一個(gè)OpenID,每個(gè)用戶在每個(gè)公眾號(hào)中的OpenId是唯一的。
3.2? 系統(tǒng)后臺(tái)開發(fā)
本系統(tǒng)后端采用Django進(jìn)行開發(fā),使用MySQL數(shù)據(jù)庫(kù)存儲(chǔ)用戶數(shù)據(jù)。用以接收和處理用戶通過點(diǎn)擊微信公眾號(hào)菜單欄,或發(fā)送消息至微信公眾號(hào),有微信公眾平臺(tái)轉(zhuǎn)發(fā)到服務(wù)器的消息。
本系統(tǒng)通過以下代碼解析微信公眾平臺(tái)傳遞來的消息,并再次發(fā)送給用戶:
import time
import xml.etree.ElementTree as Et
def xml_parse(web_data):
msg_data = Et.fromstring(web_data)
msg_type = msg_data.find('MsgType').text
if msg_type == 'text':
return TextMsg(msg_data)
elifmsg_type == 'event':
return EventMsg(msg_data)
class Msg(object):
def __init__(self,msg_data):
self.ToUserName = msg_data.find('ToUserName').text
self.FromUserName = msg_data.find('FromUserName').text
self.CreateTime = msg_data.find('CreateTime').text
self.MsgType = msg_data.find('MsgType').text
class TextMsg(Msg):gzslib202204051031def __init__(self,msg_data):
Msg.__init__(self,msg_data)
self.Content = msg_data.find('Content').text
class EventMsg(Msg):
def __init__(self,msg_data):
Msg.__init__(self,msg_data)
self.Content = msg_data.find('EventKey').text
self.Enevt = msg_data.find('Event').text
class Message:
def __init__(self,to_user,from_user,content):
self.to_user = to_user
self.from_user = from_user
self.content = content
def send(self):
message = f"""
"""
return message
3.3? 爬蟲技術(shù)
由于主要數(shù)據(jù)都來源于學(xué)校官網(wǎng)或者教務(wù)系統(tǒng),所以需要通過爬蟲技術(shù)將用戶數(shù)據(jù)獲取下來,并存到系統(tǒng)數(shù)據(jù)庫(kù)中,以提供用戶查詢。
如電費(fèi)信息獲取,需要先獲取學(xué)校中所有的寢室樓信息,再通過寢室樓查詢所有寢室房間信息,再根據(jù)寢室房間查詢?cè)摲块g電費(fèi)信息。由于學(xué)校電費(fèi)分為照明電費(fèi)和空調(diào)電費(fèi),因此需要分別獲取后保存入庫(kù)。
與教務(wù)系統(tǒng)的對(duì)接,由于官方并沒有提供相關(guān)接口,因此也是需要使用爬蟲技術(shù)將系統(tǒng)接入教務(wù)系統(tǒng)。使用代碼模擬用戶登錄,并獲取到用戶所需要的相關(guān)信息。
模擬登錄代碼為:
def login(self):
session = requests.Session()
data_str = session.get(self.CODE_URL).text.split('#')
scode = data_str[0]
sxh = data_str[1]
code = f'{self.account}%%%{self.password}'
endoded = ''
i = 0
while iif i< 20:
endoded = endoded + code[i:i + 1] + scode[0:int(sxh[i:i + 1])]
scode = scode[int(sxh[i:i + 1]):len(scode)]
else:
endoded = endoded + code[i:len(code)]
i = len(code)
i = i + 1
data = {
'userAccount':'',
'userPassword':'',
'encoded':endoded,
}
error = parsel.Selector(session.post(self.LOGIN_URL,data).text).xpath(
"normalize-space(//ul[@id='ul1']/li[@id='showMsg']/text())").extract_first()
if error:
return error
elif '確認(rèn)新密碼' in a:
return '您的密碼過于簡(jiǎn)單,請(qǐng)前往官網(wǎng)進(jìn)行重置:http://hngczy.cn:9001'
else:
return session
通過爬蟲技術(shù),用戶綁定教務(wù)系統(tǒng)賬號(hào)密碼之后,根據(jù)用戶需求,獲取用戶的課表信息,成績(jī)信息等。
用戶可通過點(diǎn)擊微信公眾號(hào)菜單欄,進(jìn)行課表、成績(jī)的查詢,獲取今日課表,最新成績(jī)等,可進(jìn)入系統(tǒng)課表頁查詢指定周期的課表,或?qū)φn表進(jìn)行一個(gè)更新;查詢指定學(xué)期的成績(jī)信息,對(duì)成績(jī)信息的一個(gè)更新。
系統(tǒng)自動(dòng)監(jiān)控教務(wù)系統(tǒng)成績(jī)信息,如有新的成績(jī)出來將及時(shí)通知到用戶,使用戶更直觀、迅速獲取到最新的成績(jī)信息。每節(jié)課上課前十分鐘,系統(tǒng)將自動(dòng)查詢數(shù)據(jù)庫(kù)中本節(jié)課有課的用戶,并發(fā)送微信模板消息予以提醒,用戶也可在系統(tǒng)用戶中心關(guān)閉提醒功能。
4? 使用成效
小程序可實(shí)現(xiàn)課表查詢、成績(jī)查詢、新出成績(jī)提醒等功能,具體如圖3所示。
5? 結(jié)? 論
本文是基于微信端的教務(wù)系統(tǒng)開發(fā)及應(yīng)用研究,基于微信端的教務(wù)系統(tǒng)具有操作簡(jiǎn)便,易普及,易維護(hù),易開發(fā),易使用等特點(diǎn),此系統(tǒng)的實(shí)現(xiàn)為院校學(xué)生帶來了極大的便利,根據(jù)已有數(shù)據(jù),全校已有八千余人使用本系統(tǒng)進(jìn)行日常的信息查詢,接收上課提醒,新成績(jī)提醒等服務(wù),并且用戶數(shù)量還在不斷新增,本系統(tǒng)也在不斷開發(fā),為學(xué)生服務(wù)提供更多的高效、優(yōu)質(zhì)的信息服務(wù)。滿足更多學(xué)生的需求。
在系統(tǒng)運(yùn)行的一年時(shí)間內(nèi),只有數(shù)次系統(tǒng)功能升級(jí)導(dǎo)致的短暫性崩潰,其余時(shí)間一直能夠?yàn)橛脩籼峁┘皶r(shí)、穩(wěn)定的查詢服務(wù),系統(tǒng)能夠及時(shí)響應(yīng)用戶的查詢請(qǐng)求。
此系統(tǒng)較傳統(tǒng)的B/S模式的系統(tǒng)也是更加受用戶所喜愛和容易接受,以微信公眾號(hào)為載體,充分利用其便捷性,為用戶提供更快,更廣,更準(zhǔn)確的教務(wù)信息。由于系統(tǒng)采用Django框架進(jìn)行開發(fā),因此系統(tǒng)具有強(qiáng)大的擴(kuò)展性,從一開始的電費(fèi)查詢系統(tǒng),后續(xù)陸續(xù)接入健康報(bào)備監(jiān)控系統(tǒng),報(bào)修系統(tǒng),教務(wù)系統(tǒng)等。在以后,這種形式的服務(wù)模式也將會(huì)越來越多,越來越普及。
參考文獻(xiàn):
[1] 高昊天,張應(yīng)青,李應(yīng),等.基于微信小程序的大學(xué)生校園服務(wù)綜合平臺(tái)的構(gòu)想與實(shí)現(xiàn) [J].電腦知識(shí)與技術(shù),2021,17(5):64-66.
[2] 劉磊,陳羽云,林潔鑫.基于微信公眾號(hào)的教務(wù)信息查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) [J].軟件導(dǎo)刊,2017,16(9):111-113.
[3] 劉娟娟.基于微信公眾平臺(tái)的微課程在教學(xué)中的應(yīng)用 [J].中國(guó)輕工教育,2014(5):94-96.
[4] 李杰,蘇怡.“互聯(lián)網(wǎng)+”模式下校園服務(wù)平臺(tái)的作用研究及發(fā)展建議 [J].中國(guó)市場(chǎng),2020(10):201-202.
[5] 武婕,李瑞.淺談微信小程序第三方開發(fā)及應(yīng)用探析 [J].智富時(shí)代,2019(3):124.