概述
看到PU的签到机制感觉挺有意思,但由于其通过管理员扫描每个用户的二维码过于麻烦,就想着用Python复刻一个类似的功能。 本项目将利用微信公众平台,实现一个由用户扫描动态二维码调用公众号接口的方式进行签到的方案。
功能简介
管理员界面可以生成动态二维码并显示 学生签到时只要在二维码生成后的10s内打开微信扫码 即可自动跳转到公众号实现签到(未关注公众号会直接跳转到登录界面) (前期需要学生提前在微信绑定个人信息)
演示
进入管理员生成二维码界面(用户需要在二维码生成后的10秒内进行签到) 由于测试阶段程序的调试需要,程序有中断可能性,敬请谅解!
实现方案
本项目的Demo抛弃了繁杂的数据库处理功能(主要是懒),以一种更轻量级的方式实现签到演示。 等期末考试完 有空的话会把注册、登录、绑定、增删改查等功能做全。
前端
每2秒从服务器获取二维码URL和已签到成员信息,并通过JS进行刷新
后端
Python-Flask
定时任务
定时获取token 储存在全局变量中
本来是想利用微信公众平台接口直接生成一个有效期未10s的二维码实现,但经过查询文档发现微信公众平台生成的带参数二维码最短存活时间为60秒。故只能通过后端逻辑实现判断。
API接口
前端二维码获取
判断上一个二维码的生成时间是否超过5秒 真:调用微信生成二维码返回URL 假:返回历史最新的二维码URL
微信
收到来自微信服务器的POST请求后,对XML信息进行解析。 若为携带Ticket的信息 则判断时间戳的差值是否小于等于10秒 真:返回签到信息 假:返回签到失败信息