{"repo":"zn-cn/wzj-sign-in-weixin","free":true,"listed":false,"github":"https://github.com/zn-cn/wzj-sign-in-weixin","clone":"git clone https://github.com/zn-cn/wzj-sign-in-weixin.git","description":"新版微助教自动签到（二维码签到，GPS签到，普通签到均可）","language":"Go","stars":66,"topics":["wzj","sign","weixin","golang","mongodb","redis"],"license":"MIT","category":"databases-storage","readme_excerpt":"新版微助教自动签到 开发环境： - 语言：Golang:1.12 - 借助展现平台：微信公众号 功能 - 多用户自动签到（二维码签到，GPS签到，普通签到均可） - 输入一次openid或者含有openid的链接之后，两小时内可自动签到所有签到 - 签到成功邮件提醒 - 支持自定义坐标，如：114.440465,30.517877 - 支持自定义坐标标签，如：东十二 - 获取自己设置的所有标签和坐标 - 课程讨论开启邮件提醒 - 获取所有课程 - 设置讨论课程 - 设置通知邮件 注： - 注意！ 以下经纬度为标准经纬度，但是手机的GPS不是最准的，经过测试，在东十二用手机取得的GPS坐标实际位置为东九那边的驾校。 - 输入的带有openid的链接有效期为两小时 - 重新进入学生栏目的网页会使之前的链接失效 - - 这时需要重新进公众号输入带有openid的链接 - 考虑到在微助教那边设置讨论课程要进入微助教网页会更新openid，这里开发一个设置接口 - 设置讨论课程之后需要到 微助教服务 号参与讨论 - 邮件提醒可能在垃圾邮件里面！ - 自动签到间隔为20 s，防止排名太靠前被发现了 使用指南 下图操作手速要快，不然链接出不来的！ 坐标拾取：https://lbs.amap.com/console/show/picker 常用经纬度 注意！ 以下经纬度为标准经纬度，但是手机的GPS不是最准的，经过测试，在东十二用手机取得的GPS坐标实际位置为东九那边的驾校。 - 东十二:114.440465,30.517877 - F楼:114.440799,30.517263 - 东九 - A区:114.433653,30.519743 - B区:114.433165,30.519453 - C区:114.432995,30.519014 - D区:114.433286,30.518387 - 西十二 - 北门:114.413702,30.514882 - 南门:114.413811,30.514386 - 东门:114.414505,30.514723 - 西门:114.413069,30.514554 效果如下： 下图需要手动刷新一下页面才能看到效果（实际已签到，但页面没有更新） 原理 签到原理 1. 首先自己注册一个微助教教师账号，开启签到 2. 打开微助教签到页面，我们能发现签到API如下 3. 对整个网页文件搜索 course-id 或者 sign-id，发现如下页面 4. 开发签到自动化接口流程如下 - 工具用户输入的openid拼接签到页面链接 - 下载签到页面链接，提取 hidden 的 input 组件信息 - 使用接口进行签到，发送数据如下 Form Data ​ Header 注：sign-id 为签到id，下图为微助教教师签到页面 微信后台开发 介绍：微信公众号提供开发者模式，使得用户在微信公众号发送的消息都会被转发到开发者的服务器，开发者可立即回复用户，同时开发者可在48小时内调用客服接口给用户发送其他消息。更多详情请查看微信公众号开发文档。 项目开发技术： - 使用 MongoDB 持久化存储用户信息 - 使用 Redis 存储临时监控队列，临时状态信息等 - 开发语言：Golang 自动签到原理： 1. 定时器 - 每 5s 对监控队列对象进行一次检测 - 检测是否有签到开启，有则进行签到 - 检测是否有讨论开启，有则进行提醒 2. 监控队列实现 - 用户输入 openid 时，在 Redis 设置 key/value，存储op","default_branch":null,"files":null,"tree":[],"storefront":"/r/zn-cn","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/zn-cn/wzj-sign-in-weixin/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}