Skip to content

release: M5 微信 JS-SDK 扫码签到 + 可选 ICP 备案号页脚 - #13

Merged
pjm314159 merged 2 commits into
mainfrom
dev
Sep 27, 2026
Merged

pjm314159 merged 2 commits into
mainfrom
dev

Conversation

@pjm314159

Copy link
Copy Markdown
Owner

变更说明

dev → main 发版合并,包含两个已 squash 合入 dev 的 feature:

  • M5 微信 JS-SDK 扫码签到(PR feat(wechat): M5 微信 JS-SDK 扫码签到——jssdk-signature 接口与微信内扫一扫 #11)
    • 后端 backend/src/wechat/:GET /api/wechat/jssdk-signature?url=(需会话)与 GET /api/wechat/status(免会话可用性探测,不泄露凭证)
    • WechatClient 内存缓存 access_token / jsapi_ticket(7200s,提前 300s 刷新,tokio::sync::RwLock);签名串取 plain SHA1,url 自动去除 # 及其后部分
    • 凭证经 WECHAT_APP_ID / WECHAT_APP_SECRET 注入,未配置时返回 40307(不 panic)
    • 前端 src/lib/wechat.ts(UA 检测 + jweixin 1.6.0 幂等注入 + wx.config → wx.scanQRCode)与 src/api/wechat.ts;房间页底栏在「微信内 且 后端可用」时展示「微信扫一扫」,非微信环境保持相机扫码
    • 新增 VITE_WX_DEBUG 真机调试开关(默认关闭)
  • 可选 ICP 备案号页脚(PR feat(ui): 新增可选 ICP 备案号页脚 #12)
    • VITE_ICP_BEIAN 注入;未配置时组件 return null 零 DOM 痕迹,配置后登录页底部展示并链接工信部
    • 号码只写在部署机 frontend/.env.local(已 gitignore),仓库与开源发布不含任何具体号码,可随时 git pull 更新

变更类型

  • feat 新功能
  • fix 缺陷修复
  • docs 文档
  • refactor 重构(不改行为)
  • chore 构建/依赖/杂项

目标分支

  • dev(feature/fix 常规合并)
  • main(仅发版合并,dev → main)

自查清单

  • 分支名符合规范(feat/ fix/ docs/ chore/ + 简短描述),基于最新 dev 创建
  • 提交信息符合 Conventional Commits
  • cargo fmt --check / cargo clippy -D warnings / cargo test 通过(后端改动)
  • eslint / tsc --noEmit / 测试 / 构建通过(前端改动)
  • 文档已同步(SPEC/DESIGN/CHANGELOG.md,如有影响)
  • 无 unwrap()(测试代码除外)、无 unsafe、无 any
  • 涉及资源分配的改动已确认上限约束(房间数/人数/消息大小/频率/存量)

关联 issue / 备注

  • CI:后端 fmt/clippy/136 tests 通过;前端 lint/typecheck/62 tests/build 通过
  • 微信内扫码仍需真机验证(HTTPS 域名 + 已配置公众号)
  • 本次不打 tag

* feat(wechat): M5 微信 JS-SDK 扫码签到——jssdk-signature 接口与微信内扫一扫

后端新增 wechat 模块:access_token / jsapi_ticket 内存缓存(tokio RwLock,提前
300s 刷新)与 plain SHA1 签名;GET /api/wechat/jssdk-signature?url= 供前端
wx.config,url 自动去除 # 及其后部分。凭证经 WECHAT_APP_ID / WECHAT_APP_SECRET
注入,未配置返回 40307 而非 panic。

前端新增 MicroMessenger UA 检测与 jweixin 动态注入(幂等),房间页底栏在微信内
新增「微信扫一扫」主按钮,扫码结果与相机扫码同路径(本地预校验 → share_qr
推送全房间);非微信环境保持相机扫码。

* fix(wechat): 消除 NodeListOf 迭代告警并加固微信扫一扫取消处理

- 测试改用 Array.from,消除 IDE 对 for...of NodeListOf 的类型告警(本项目
  tsconfig lib 为 ES2023+DOM,未含 DOM.Iterable;tsc -b 实际不受影响)
- wx.scanQRCode 的 scanType 限定为 qrCode,避免误扫条形码
- fail 回调 errMsg 含 cancel 时按用户取消处理(部分微信版本行为),返回 null

* feat(wechat): 新增 status 可用性预检查与 VITE_WX_DEBUG 真机调试开关

参照参考实现 qrcode_share:
- 后端新增 GET /api/wechat/status(免会话)返回 {available, reason},只暴露
  「是否已配置」不含凭证
- 前端环境预检查:房间页仅在「微信内 且 后端判定可用」时才渲染「微信扫一扫」
  入口,未配置时完全不显示,避免点击后才报 40307
- VITE_WX_DEBUG=true 时 wx.config({debug:true}),真机以弹窗输出签名校验细节,
  便于定位 invalid signature(默认关闭)
备案号通过 VITE_ICP_BEIAN 注入(生产机 frontend/.env.local,已 gitignore),未配置时组件返回 null 零 DOM 痕迹;仓库与开源发布不含任何具体号码,部署方可随时 git pull 更新而不冲突。
@pjm314159
pjm314159 merged commit 96649d6 into main Sep 27, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant