3.1 KiB
3.1 KiB
移动端一键绑定服务号实施计划
Goal: 按用户已确认的中科兴皖体验,关注后点击一次绑定,经网页授权自动返回并绑定当前账号,不再记验证码或二次确认。
Architecture: 小程序显式点击创建 mobile 会话;OAuth 回调仍仅保存候选身份。移动回调页通过微信 JS SDK 返回原小程序页面,原登录页面查询自己的会话并自动调用现有确认接口。电脑会话默认 desktop,保留验证码人工确认。短时随机 state、原账号/租户归属、真实关注检查和冲突校验继续生效;不向网页传登录令牌。桥接失败提供返回按钮与左上角返回说明,原页面刷新可重试。
Tech Stack: uni-app / Vue 3、FastAPI、Redis、现有微信 OAuth 服务。
范围与验收
- 第1步保留现有打开服务号按钮,不恢复二维码或复制名称区域;微信原生确认无法省略。
- 第2步显示当前账号,按钮为“一键绑定当前账号”;只有本页面显式发起的会话可以自动提交,普通进入页面不绑定。
- 授权回调不写数据库,不从 URL 接收跳转目的地或登录凭据;移动模式由服务端会话决定。
- 未关注、取消授权、过期、切换账号、网络失败不得显示成功;后台确认成功且真实关注才显示已开通。
- 不改变电脑流程、不改表、不修改参考项目、不发布。
实施任务
- 修改
miniprogram/scripts/test-wechat-binding-flow.mjs和 integration 测试:授权后自动确认、无弹窗、未主动发起不确认、切号晚响应、失败后刷新重试。运行 node 测试确认旧实现失败。 - 在
backend/tests/test_wechat_notice_binding.py添加 mobile/desktop 模式、回调不落库、移动 HTML 返回桥接和 CSP 测试;新增 JS 桥接可执行测试。隔离环境运行 pytest 确认失败。 - 修改绑定 flow/composable/API/引导文案:请求
{mode: 'mobile'},返回刷新后在同一登录会话中自动确认,移除验证码展示和确认弹窗。 - 后端 start 可选模式默认 desktop;服务端保存 mode 并返回给回调渲染。新增移动回调 HTML 与限域、nonce CSP;通过官方 JS SDK 自动返回,失败仍可手动返回。
- 执行 6 组小程序回归测试及新增桥接测试、
ENV_FILE=/dev/null venv/bin/python -m pytest tests/test_wechat*.py -q、微信小程序构建。审查改动与错误分支。 - 更新部署文档和 backend/miniprogram/root 知识图谱;说明尚需真机授权验收。
验证结果
- 小程序相关 48 项测试通过;后端微信相关 215 项测试通过(隔离数据库、模拟微信)。
- 微信小程序生产构建成功,未上传/发布;保留原有 uniCloud、统计 AppID、Browserslist 和样式选择器提示。
- 独立审查发现桥接延迟可能重复返回,已补充失败测试并修复为 Bridge 就绪后仅一次自动返回;复核通过。
- 已更新部署说明和代码知识图谱。真机仍需验证业务域名、真实关注、OAuth 和 iOS/Android 自动返回。