蔡龍 劉星宇



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