蔡龍 劉星宇
摘? 要:由于傳統(tǒng)B/S端教務(wù)系統(tǒng)的局限性和安全問題,因此將移動互聯(lián)網(wǎng)技術(shù)與傳統(tǒng)B/S型信息化管理系統(tǒng)相結(jié)合進行了研究,通過二次開發(fā)微信公眾號與強智教務(wù)系統(tǒng)進行數(shù)據(jù)交互,更好地服務(wù)在校師生,應(yīng)對學(xué)習(xí)生活中的問題,如課表查詢、生活繳費等功能。系統(tǒng)具有便捷性,穩(wěn)定性和擴展性,因此能為用戶提供更快,更廣,更準(zhǔn)確的教務(wù)信息,為進一步開發(fā)其他功能奠定基礎(chǔ)。
關(guān)鍵詞:教務(wù)系統(tǒng);微信;B/S
中圖分類號:TP311? 文獻標(biāo)識碼:A 文章編號: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ā)展程度的提高,移動端互聯(lián)網(wǎng)技術(shù)逐漸成為主流。自從騰訊推出微信之后,微信公眾號與微信小程序發(fā)展迅速,以其無須下載,功能齊全,即開即用,界面友好,操作簡便等眾多優(yōu)勢迅速占領(lǐng)了許多用戶的移動端應(yīng)用市場,也成了人們工作和生活中不可或缺的工具之一,用來支付或辦公聊天。人們也更趨向于使用微信端來獲取信息。
目前國內(nèi)常用的教務(wù)系統(tǒng)平臺如正方教務(wù)管理系統(tǒng),強智教務(wù)管理系統(tǒng),青果教務(wù)管理系統(tǒng)等。我校教務(wù)系統(tǒng)仍然為傳統(tǒng)的B/S模式,此模式限制諸多,例如,在手機端信息顯示不完整、查詢不便、網(wǎng)址不容易記等,導(dǎo)致大學(xué)生無法及時獲取到學(xué)校發(fā)布的最新消息,如課表,成績或者社考報名等,造成了諸多不便利,且便利性和安全性都存在一定的隱患。
因此將移動互聯(lián)網(wǎng)技術(shù)與傳統(tǒng)B/S型信息化管理系統(tǒng)相結(jié)合,必然以及是一種新的發(fā)展趨勢,因此,本文旨在通過構(gòu)建強智教務(wù)系統(tǒng)與微信端的數(shù)據(jù)交互,從而實現(xiàn)只需要使用手機微信即可進行成績查詢、生活繳費、課表通知等一系列日常操作,更好地服務(wù)在校大學(xué)生,幫助大學(xué)生更快更好地融入大學(xué)生活、應(yīng)對大學(xué)日常生活中所遇到的煩惱和疑問。
1? 可行性分析
隨著微信客戶群的持續(xù)增長和微信公眾平臺接口的開發(fā),可利用微信公眾平臺實現(xiàn)的功能越來越多,現(xiàn)有許多服務(wù)商均推出了微信端,如美團外賣小程序,可實現(xiàn)使用微信即可點外賣、T3出行小程序可實現(xiàn)使用微信打車出行、建設(shè)銀行微信公眾號服務(wù)號可實現(xiàn)微信快捷查詢銀行卡信息等,提高了服務(wù)質(zhì)量,節(jié)約了服務(wù)成本。
在校園服務(wù)這一塊,許多學(xué)校組織也開通了相應(yīng)的公眾號,如湖南工程職院開通了微信公眾號,發(fā)布一些校園新聞,資訊等信息,但是僅提供了新聞資訊,并未開通校園服務(wù),如課表查詢,成績查詢,考試信息等學(xué)生個人用戶信息。
如果學(xué)校要發(fā)布一條通知,需要先下達至輔導(dǎo)員處,輔導(dǎo)員再轉(zhuǎn)達至班級群內(nèi),在此環(huán)節(jié)中,如果傳達不及時或不準(zhǔn)確,均會導(dǎo)致通知不到位等情況發(fā)生。
1.1? 平臺優(yōu)勢
微信公眾平臺首先是一個開放、免費的平臺,且官方提供了完整的開發(fā)文檔,因此提高了開發(fā)效率,節(jié)省了開發(fā)成本。
微信公眾號是在微信基礎(chǔ)平臺上擴展的功能模塊,通過這一平臺,可以方便地與特定群體實現(xiàn)文字、圖片、語音的全方位溝通、互動。微信公眾平臺的傳播方式是一對多的傳播,直接將消息推送到手機,因此達到率和被觀看率幾乎是100%。
1.2? 安全優(yōu)勢
本系統(tǒng)數(shù)據(jù)是基于用戶授權(quán)獲取教務(wù)系統(tǒng)課表成績數(shù)據(jù),基于學(xué)校開放數(shù)據(jù)獲取電費信息,系統(tǒng)僅有查詢權(quán)限,不存在數(shù)據(jù)篡改等危險操作,提升了整體的安全性,避免了被外界攻擊的可能性。
1.3? 開發(fā)優(yōu)勢
微信公共平臺會為每個用戶對每個公眾號生成一個唯一的OpenID,系統(tǒng)可根據(jù)此直接判斷用戶,無須注冊登錄,并且可獲取用戶基本信息。開發(fā)者可通過公眾號消息會話形式與用戶進行交互。并且在公眾號內(nèi)提供網(wǎng)頁形式服務(wù),網(wǎng)頁授權(quán)可獲取用戶基本信息,開發(fā)者可在網(wǎng)頁上通過JavaScript代碼使用微信原生功能的工具包,開發(fā)者可以使用它在網(wǎng)頁上錄制和播放微信語音、微信分享等許多能力。gzslib2022040510312? 框架設(shè)計
公眾號端:用戶通過微信公眾號會話或通過點擊菜單欄查詢基礎(chǔ)業(yè)務(wù)邏輯,亦可通過點擊進入系統(tǒng)網(wǎng)頁,可視化的管理用戶基本信息,查看課表成績等。公眾號端建立起了作為用戶與服務(wù)器端溝通的橋梁。
服務(wù)器端:服務(wù)器端是關(guān)鍵代碼層,主要體現(xiàn)系統(tǒng)的業(yè)務(wù)流程以及業(yè)務(wù)邏輯等。在登錄系統(tǒng)、成績系統(tǒng)、課表系統(tǒng)、校園信息系統(tǒng)主要模塊之下,要根據(jù)每個系統(tǒng)相關(guān)的業(yè)務(wù)需求進行邏輯處理以及判斷條件的定義。模塊之間的數(shù)據(jù)傳輸體現(xiàn)了業(yè)務(wù)流程。
數(shù)據(jù)源端:此層為系統(tǒng)主要的數(shù)據(jù)來源,如電費信息來源于學(xué)校開放的電費查詢頁面,成績和課表信息來自學(xué)校的強智教務(wù)系統(tǒng),通過用戶授權(quán)提供賬號密碼,服務(wù)器以代碼的形式訪問數(shù)據(jù)源端,獲取用戶所需數(shù)據(jù),并清晰的返回給用戶。
系統(tǒng)總體框架如圖1所示。
3? 設(shè)計實現(xiàn)
系統(tǒng)主要使用流程如下:學(xué)生關(guān)注微信公眾號,發(fā)送綁定或點擊菜單欄個人中心中的綁定,即可進入個人信息綁定頁面,用戶輸入信息綁定后,服務(wù)器將根據(jù)用戶所提供的的信息去獲取教務(wù)系統(tǒng)的信息,實現(xiàn)數(shù)據(jù)的雙向綁定,用戶可通過發(fā)送關(guān)鍵詞,如:“課表”,微信公眾號將用戶信息回調(diào)至服務(wù)器后端,后端接收到用戶消息后使用XML解析消息,獲取消息內(nèi)容,根據(jù)消息內(nèi)容分析處理,對業(yè)務(wù)進行處理,將處理后的結(jié)果以XML格式使用POST請求給微信服務(wù)器,微信服務(wù)器接收到請求后,將消息解析后轉(zhuǎn)發(fā)給用戶,以此實現(xiàn)用戶信息的查詢,如圖2所示。
3.1? 微信公眾平臺接入
由于此系統(tǒng)依賴于微信公眾號進行開發(fā),因此需要接入微信公眾平臺。
開發(fā)者接入微信公眾平臺需按照以下步驟完成:
(1)填寫服務(wù)器配置。登錄微信公眾平臺官網(wǎng)后,在公眾平臺官網(wǎng)的開發(fā)-基本設(shè)置頁面,勾選協(xié)議成為開發(fā)者,點擊“修改配置”按鈕,填寫服務(wù)器地址(URL)、Token和EncodingAESKey,其中URL是開發(fā)者用來接收微信消息和事件的接口URL。Token可由開發(fā)者可以任意填寫,用作生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)。EncodingAESKey由開發(fā)者手動填寫或隨機生成,將用作消息體加解密密鑰。
(2)驗證消息的確來自微信服務(wù)器。開發(fā)者對公眾平臺回調(diào)的signature參數(shù)進行驗證。如果確認是GET請求來此微信公眾平臺,則直接返回echostr參數(shù)的內(nèi)容,開發(fā)接入成功,否則接入失敗。校驗步驟:首先將token,timestamp,nonce三個值進行字典序排序,然后將三個參數(shù)字符串拼接成一個字符串后進行sha1加密最后開發(fā)者獲得加密后的字符串可與signature比對,確認該請求來源于微信
在本系統(tǒng)中,使用Django開源框架進行開發(fā),因此驗證消息代碼為:
@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ù)接口文檔實現(xiàn)業(yè)務(wù)邏輯。用戶通過向公眾號發(fā)送消息或點擊自定義菜單或進行微信支付等情況時,微信服務(wù)器會根據(jù)開發(fā)者填寫的網(wǎng)址進行事件回調(diào),將消息推送給開發(fā)服務(wù)器,開發(fā)者根據(jù)需求業(yè)務(wù)邏輯進行響應(yīng),如回復(fù)文字或圖片。公眾號收到用戶消息后,公眾號會將用戶微信號進行加密,最終得到一個OpenID,每個用戶在每個公眾號中的OpenId是唯一的。
3.2? 系統(tǒng)后臺開發(fā)
本系統(tǒng)后端采用Django進行開發(fā),使用MySQL數(shù)據(jù)庫存儲用戶數(shù)據(jù)。用以接收和處理用戶通過點擊微信公眾號菜單欄,或發(fā)送消息至微信公眾號,有微信公眾平臺轉(zhuǎn)發(fā)到服務(wù)器的消息。
本系統(tǒng)通過以下代碼解析微信公眾平臺傳遞來的消息,并再次發(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ù)庫中,以提供用戶查詢。
如電費信息獲取,需要先獲取學(xué)校中所有的寢室樓信息,再通過寢室樓查詢所有寢室房間信息,再根據(jù)寢室房間查詢該房間電費信息。由于學(xué)校電費分為照明電費和空調(diào)電費,因此需要分別獲取后保存入庫。
與教務(wù)系統(tǒng)的對接,由于官方并沒有提供相關(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 '確認新密碼' in a:
return '您的密碼過于簡單,請前往官網(wǎng)進行重置:http://hngczy.cn:9001'
else:
return session
通過爬蟲技術(shù),用戶綁定教務(wù)系統(tǒng)賬號密碼之后,根據(jù)用戶需求,獲取用戶的課表信息,成績信息等。
用戶可通過點擊微信公眾號菜單欄,進行課表、成績的查詢,獲取今日課表,最新成績等,可進入系統(tǒng)課表頁查詢指定周期的課表,或?qū)φn表進行一個更新;查詢指定學(xué)期的成績信息,對成績信息的一個更新。
系統(tǒng)自動監(jiān)控教務(wù)系統(tǒng)成績信息,如有新的成績出來將及時通知到用戶,使用戶更直觀、迅速獲取到最新的成績信息。每節(jié)課上課前十分鐘,系統(tǒng)將自動查詢數(shù)據(jù)庫中本節(jié)課有課的用戶,并發(fā)送微信模板消息予以提醒,用戶也可在系統(tǒng)用戶中心關(guān)閉提醒功能。
4? 使用成效
小程序可實現(xiàn)課表查詢、成績查詢、新出成績提醒等功能,具體如圖3所示。
5? 結(jié)? 論
本文是基于微信端的教務(wù)系統(tǒng)開發(fā)及應(yīng)用研究,基于微信端的教務(wù)系統(tǒng)具有操作簡便,易普及,易維護,易開發(fā),易使用等特點,此系統(tǒng)的實現(xiàn)為院校學(xué)生帶來了極大的便利,根據(jù)已有數(shù)據(jù),全校已有八千余人使用本系統(tǒng)進行日常的信息查詢,接收上課提醒,新成績提醒等服務(wù),并且用戶數(shù)量還在不斷新增,本系統(tǒng)也在不斷開發(fā),為學(xué)生服務(wù)提供更多的高效、優(yōu)質(zhì)的信息服務(wù)。滿足更多學(xué)生的需求。
在系統(tǒng)運行的一年時間內(nèi),只有數(shù)次系統(tǒng)功能升級導(dǎo)致的短暫性崩潰,其余時間一直能夠為用戶提供及時、穩(wěn)定的查詢服務(wù),系統(tǒng)能夠及時響應(yīng)用戶的查詢請求。
此系統(tǒng)較傳統(tǒng)的B/S模式的系統(tǒng)也是更加受用戶所喜愛和容易接受,以微信公眾號為載體,充分利用其便捷性,為用戶提供更快,更廣,更準(zhǔn)確的教務(wù)信息。由于系統(tǒng)采用Django框架進行開發(fā),因此系統(tǒng)具有強大的擴展性,從一開始的電費查詢系統(tǒng),后續(xù)陸續(xù)接入健康報備監(jiān)控系統(tǒng),報修系統(tǒng),教務(wù)系統(tǒng)等。在以后,這種形式的服務(wù)模式也將會越來越多,越來越普及。
參考文獻:
[1] 高昊天,張應(yīng)青,李應(yīng),等.基于微信小程序的大學(xué)生校園服務(wù)綜合平臺的構(gòu)想與實現(xiàn) [J].電腦知識與技術(shù),2021,17(5):64-66.
[2] 劉磊,陳羽云,林潔鑫.基于微信公眾號的教務(wù)信息查詢系統(tǒng)設(shè)計與實現(xiàn) [J].軟件導(dǎo)刊,2017,16(9):111-113.
[3] 劉娟娟.基于微信公眾平臺的微課程在教學(xué)中的應(yīng)用 [J].中國輕工教育,2014(5):94-96.
[4] 李杰,蘇怡.“互聯(lián)網(wǎng)+”模式下校園服務(wù)平臺的作用研究及發(fā)展建議 [J].中國市場,2020(10):201-202.
[5] 武婕,李瑞.淺談微信小程序第三方開發(fā)及應(yīng)用探析 [J].智富時代,2019(3):124.