APP下载

基于微信端的教务系统开发及实现

2021-04-04蔡龙刘星宇

现代信息科技 2021年18期
关键词:课表教务开发者

蔡龙 刘星宇

摘  要:由于传统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代码使用微信原生功能的工具包,开发者可以使用它在网页上录制和播放微信语音、微信分享等许多能力。gzslib202204051031

2  框架設计

公众号端:用户通过微信公众号会话或通过点击菜单栏查询基础业务逻辑,亦可通过点击进入系统网页,可视化的管理用户基本信息,查看课表成绩等。公众号端建立起了作为用户与服务器端沟通的桥梁。

服务器端:服务器端是关键代码层,主要体现系统的业务流程以及业务逻辑等。在登录系统、成绩系统、课表系统、校园信息系统主要模块之下,要根据每个系统相关的业务需求进行逻辑处理以及判断条件的定义。模块之间的数据传输体现了业务流程。

数据源端:此层为系统主要的数据来源,如电费信息来源于学校开放的电费查询页面,成绩和课表信息来自学校的强智教务系统,通过用户授权提供账号密码,服务器以代码的形式访问数据源端,获取用户所需数据,并清晰的返回给用户。

系统总体框架如图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):gzslib202204051031

def __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"""

<![CDATA[{self.to_user}]]>

<![CDATA[{self.from_user}]]>

{int(time.time())}

<![CDATA[text]]>

<![CDATA[{self.content}]]>

"""

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 i

if 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.

猜你喜欢

课表教务开发者
学生出招解决”日课牌“问题
如果我是校长
关于教务工作的几点思考
INNO EDU 创新教育大会
“85后”高学历男性成为APP开发新生主力军
16%游戏开发者看好VR
高职院校教务员业务素质的培养与提高探究
各地区学生课表
写在最后
高校教务管理的现状及改进