王清 王文莉
【摘 要】基于新浪SAE平台,利用PHP CURL技术获取课表查询页面服务器会话SESSION_ID、验证码图片,模拟提交教师信息表单数据,获取、识别、存储教师课表信息。SAE PHP服务器接收、识别微信公众号转发的用户菜单点击事件、文本消息,获取用户身份,查询对应课表信息发送给微信公众号,微信公众号回复给用户。
【关键词】SAE平台;微信课表信息;查询系统
0 前言
教授课程较多的老师,课表安排繁多复杂。老师随身携带纸质课表也十分不便,当然我们可以使用智能手机上网查询。可惜国内大多高校的教务系统为传统的HTML网页,仅适合电脑端浏览;使用手机浏览,页面显示大多变形或异常,这就给课表的查询带来一定的困难。现在,微信是一种生活方式!智能手机用户几乎均安装了微信客户端。那么,使用微信查询课表将十分的方便。新浪云应用(Sina App Engine简称SAE)是国内最具影响力的,分布式Web应用/业务开发托管、运行平台。SAE提供数据库服务、存储与CDN服务、应用程序服务、网络与安全服务、通信服务与第三方服务等[1]。将开发的PHP、JAVA web应用运行在SAE平台上,无需考虑硬件、运维、安全等问题,移动应用开发部署十分方便,且运维成本低廉,适合中小型移动应用的开发部署。
1 技术路线
1.1 微信平台及绑定
首先开通一个微信公众号,并通过微信的公众号认证,通过微信认证有权使用微信提供的自定义菜单接口。本文使用的微信公众号为zzrvtchelp。zzrvtchelp公众号采用回调开发模式,微信公众平台将用户关注事件、用户发送的消息、图片等信息转发给SAE PHP服务器,由SAE PHP服务器处理;SAE PHP服务器处理完毕将结果数据发送给微信公众平台,微信公众平台再将其发送给用户,流程如图1所示。
用户关注微信公众号后,用户可发送消息给公众号,公众号反馈消息给用户完成用户与微信公众号的互动。但这种互动方式微信公众号无法识别用户的教工身份。微信为每一个用户提供了一个openID,用户发送的消息与公众号反馈的消息均携带此openID,我们将openID与教师在教务系统中的userID绑定就可以识别教师的身份查询并回复其课表。
用户关注微信公众号时,平台反馈关注消息如图2所示。提示用户点击蓝色字体链接进入微信绑定页面,如图3所示。微信绑定页面URL地址为:
http://2.zzrvtc.sinaapp.com/KB1/mainJsKb.php?openID=oYNlSs5uk-Vcbp0G0Pqz2RZ7jbx8。该URL携带了openID参数,该参数是由SAE后台分析用户关注事件获取的该用户的openID,用于微信用户的绑定。用户输入教工号、验证码选取查询得到的教工对象,最后点击【绑定微信并导入课表】按钮,页面发送GET请求到SAE PHP服务器用于获取用户课表。
1.2 获取课表
郑州铁路职业技术学院采用青果公司的教务系统,该系统未对外开放课表查询接口,但提供了教师课表查询页面方便教师查询课表。我们可通过CURL提交表单数据给该页面URL接口以获取教师的课表。
微信绑定页面是运行在SAE服务器上的PHP页面,用户点击打开该页面时,服务器首先采用CURL登陆青果教务系统,获得页面与服务器交互服务器分配的SESSION_ID和与此SESSION_ID对应的验证码图片。CURL是一个利用URL语法规定来传输文件和数据的工具,支持HTTP、FTP、TELNET等协议,常用于WEB页面访问、模拟表单提交、网络资源下载等操作,PHP支持CURL库[2]。用户填写教工号或姓名、验证码选取员工对象(针对教师重名的现象),点击【绑定微信并导入课表】按钮,页面发送POST请求给SAE PHP服务器。
位于SAE上的PHP服务器接收到该页面的POST请求,并获取其携带的数据,PHP服务器采用CURL向教务系统教师课表查询页面URL接口发送POST请求(该请求携带表1所示数据),教务系统返回该教师的课表数据。
青果返回的课表数据是HTML页面,我们需对该HTML页面解析才能获取课表的文本信息。PHP提供了HTML解析类库SIMPLE_HTML_DOM,利用SIMPLE_HTML_DOM根据HTML页面的格式特点如标题、表格、列表等HTML元素节点对HTML页面进行解析获取我们需要的课表数据。
SAE提供了MYSQL数据库用于移动应用的数据存储,将解析得到的课表数据存储到MYSQL数据表中,数据包包含openID字段,用于识别用户微信是否绑定。
1.3 微信课表查询
用户点击【我的课表】菜单查询当日课表或发送数字0X(X取值1-7)查询本周数字对应日的课表;如发送01查询本周一课表。用户点击【我的课表】或发送数字0X,微信公众号将菜单点击事件或文本消息发送给SAE PHP服务器,服务器识别菜单事件ID、消息关键词以及消息的发送者即该用户微信openID,在课程数据表中查询openID对应的课表内容,将课表内容发送给微信公众号,微信公众号以文本方式返回教师的课表,如图4、图5所示。
2 结语
利用新浪SAE平台、微信客户端实现了微信课表查询移动应用。目前zzrvtchelp公众号处于我校软件学院系内教师试用阶段,已平稳运行6个月,我系教师反映效果良好,将向全校推广。微信课表查询是数字校园向移动互联发展的一个小的尝试,下一步将结合我校实际,开发微信班车位置查询等移动应用。
【参考文献】
[1]新浪.SAE云应用[EB/OL].http://www.sinacloud.com/sae.html,2015.
[2]脚本之家.PHP中使用cURL实现Get和Post请求的方法[EB/OL].http://www.jb51.net/article/34745.htm,2013-03-13.
[责任编辑:杨玉洁]