Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

XAIU_Sign

License: MIT Version Platform Author

🚀 面向西安外事学院智慧课堂(zhkt.xaiu.edu.cn)的免企业微信扫码签到助手,解除单设备企业微信绑定限制,支持任意浏览器及独立 Android App 原生摄像头扫码签到。


📖 项目背景与解决的痛点

西安外事学院智慧课堂签到系统强制依赖企业微信内置环境,调用 wx.scanQRCode 接口进行二维码扫码。这种设计带来了诸多不便:

  • 单设备与账号强绑定:企业微信单设备仅支持登录一个账号,切换账号繁琐,无法在一台手机上便捷完成多账号或代扫码签到;
  • 非微信环境失效:脱离企业微信内置浏览器(如在普通浏览器、平板或电脑端打开)时,点击扫码签到会直接报错或无响应;
  • 远距离扫码体验差:企业微信内置扫码无法灵活控制摄像头变焦,坐在教室后排往往难以对焦大屏二维码。

XAIU_Sign 通过底层拦截与模拟企业微信 JS-SDK,直接调用系统硬件摄像头并内嵌纯前端 jsQR 二维码解码引擎。无需安装或登录企业微信,只需在网页端或配套 Android 客户端输入账号即可随时调起摄像头快速扫码签到,并支持双指缩放对焦。


✨ 核心特性

  • 🎯 摆脱企业微信依赖: 深度 Mock 微信 JS-SDK (wx.scanQRCode 及配套配置函数),在任意支持 WebRTC 的浏览器环境中均可无缝使用。
  • 📷 原生摄像头快速扫码: 集成开源高效的 jsQR 图像解析库,实时捕获摄像头视频流帧,毫秒级识别 4 位数字签到码或签到链接。
  • 🔍 双指触控变焦 (Zoom): 针对教室大屏幕距离远、后排扫码困难等场景,支持双指实时放大/缩小摄像头画面,大幅提升远距离扫码成功率。
  • 📱 多端全场景支持:
    • 油猴脚本模式: 兼容 Via 浏览器、X 浏览器、Kiwi Browser、Edge / Chrome(Tampermonkey / Violentmonkey)等多端环境。
    • Android 客户端模式: 提供轻量原生 Android WebView 壳工程,开箱即用,支持硬件加速与自适应全屏。
  • 🔒 严格安全与隐私保护: 纯本地前端解析与转发,无任何中转服务器,不记录、不上传任何学号、密码、Cookie 或个人隐私凭证。

📁 目录结构

XAIU_Sign/
├── XaiuSignApp/                   # Android 原生客户端工程
│   ├── app/
│   │   ├── build.gradle           # App 模块构建配置
│   │   ├── proguard-rules.pro     # 混淆规则
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── assets/
│   │           │   └── sign_patch.js         # WebView 静态注入脚本
│   │           ├── java/com/xaiu/sign/
│   │           │   └── MainActivity.java     # 主 Activity 与 WebView 容器
│   │           └── res/                      # 图标、主题与网络安全配置
│   ├── gradle/wrapper/
│   │   └── gradle-wrapper.properties
│   ├── build.gradle               # 根项目构建配置
│   ├── gradle.properties          # Gradle 全局属性
│   └── settings.gradle            # 工程模块定义
├── scripts/
│   └── sign_patch.user.js         # 油猴用户脚本源码
├── sign_patch.user.js             # 根目录便捷安装脚本
├── .gitignore                     # Git 忽略规则
├── LICENSE                        # MIT 开源许可证
└── README.md                      # 项目技术说明文档

🚀 使用指南

方案一:使用油猴用户脚本 (推荐移动端轻量使用)

1. 移动端浏览器配置(以 Via 浏览器 / X 浏览器为例)

  1. 打开浏览器设置 -> 脚本 / 插件管理
  2. 添加新脚本,复制 scripts/sign_patch.user.js 的全部内容并粘贴保存。
  3. 域名匹配确认为 *://zhkt.xaiu.edu.cn:8443/*
  4. 在浏览器中打开智慧课堂页面 https://zhkt.xaiu.edu.cn:8443/,登录后进入签到页面,点击“扫码签到”即可调起内置扫码取景框。

2. 电脑端浏览器(Chrome / Edge / Firefox)

  1. 在浏览器应用商店安装 TampermonkeyViolentmonkey 扩展。
  2. 打开扩展控制面板,新建脚本并将 sign_patch.user.js 源码导入保存。
  3. 访问智慧课堂站点即可生效。

方案二:Android 客户端独立运行

本项目提供完整的 Android Studio 源码工程,打包后可生成独立的 APK 安装包:

1. 环境准备

  • Android Studio Hedgehog (2023.1.1) 或更高版本
  • JDK 17 / JDK 21
  • Android SDK (API Level 24 ~ 34)

2. 编译构建步骤

  1. 克隆或下载本仓库到本地:
    git clone https://github.com/AnonyJcy/XAIU_Sign.git
  2. 打开 Android Studio,选择 Open 并定位到 XaiuSignApp 目录。
  3. 等待 Gradle Sync 完成后,连接 Android 手机并开启 USB 调试。
  4. 点击 Run 'app' 即可直接编译并安装到手机。
  5. 如需打包 Release APK,在菜单栏依次点击 Build -> Build Bundle(s) / APK(s) -> Build APK(s)

🛠️ 技术实现原理

1. JS-SDK 拦截机制 (wx Mock)

智慧课堂前端采用企业微信 JS-SDK 校验逻辑。脚本在 document-start 阶段通过 Object.defineProperty 劫持全局 window.wx 对象:

var wxHandler = {
    scanQRCode: function (opts) {
        opts = opts || {};
        scanUI(function (code) {
            if (code) {
                if (opts.success) opts.success({ resultStr: code, errMsg: 'scanQRCode:ok' });
                if (opts.complete) opts.complete({ resultStr: code, errMsg: 'scanQRCode:ok' });
            } else {
                if (opts.fail) opts.fail({ errMsg: 'scanQRCode:cancel' });
            }
        });
    },
    config: function(){},
    ready: function(cb){ if(cb) cb(); },
    checkJsApi: function(o){ if(o && o.success) o.success({checkResult:{}}); }
    // ... 其他 JS-SDK 兼容桩
};

当业务代码调用 wx.scanQRCode() 时,触发自定义的 WebRTC 视频捕捉交互界面。

2. 客户端 WebView 注入与权限穿透

Android 客户端利用 WebViewClientonPageStartedonPageFinished 生命周期动态注入补丁代码:

  • 通过 WebChromeClient.onGeolocationPermissionsShowPrompt 授权地理位置。
  • 动态申请 Manifest.permission.CAMERA 权限,打通 WebView 内部 HTML5 摄像头访问通道。
  • 配置 network_security_config.xml 放行学校内网证书与自签名域名通信。

⚠️ 免责声明 (Disclaimer)

  1. 用途限制: 本项目开源仅供 高校移动端 Web 架构研究、HTML5 摄像头调用与 WebRTC 自动化测试技术交流 使用。严禁用于任何破坏正常教学秩序、伪造出勤记录或违反学校规章制度及国家法律法规的不正当场景。
  2. 时限与删除承诺: 建议并要求所有使用者仅将本项目作为个人本地技术学习与研究之用,并在下载、克隆或测试后 24 小时内自行永久删除全部源代码、脚本文件及衍生应用。
  3. 责任自负: 使用者在知悉并同意上述条款的前提下方可阅读、编译或运行本项目。用户使用本脚本及相关客户端造成的任何直接或间接后果(包括但不限于账号受限、学籍违纪处分、技术纠纷等)均由使用者本人全权自行承担,与本项目原作者及贡献者无关。
  4. 数据脱敏: 本项目代码库中已完全剔除所有账号信息、学号数据、测试 Token 与个人隐私,不包含任何真实个人身份数据或内部机密。

📄 开源许可证

本项目采用 MIT 许可证 开源。

Copyright (c) 2026 Anony (AnonyJcy)

About

解决西安外事学院智慧课堂强依赖企业微信扫码的限制,支持任意移动端浏览器与独立 App 免登录企微扫码签到,支持多账号登录

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages