Files
airz-uniapp/docs/微信与手机号登录开发-20261021.md
T
hujun 2c9d3feab5 feat: 完善登录流程、UI适配及协议文档更新
本次提交包含以下修改:
1. 新增微信登录相关服务及页面逻辑,实现首次微信绑定手机号流程
2. 优化产品匹配卡片 UI,移除不必要状态显示
3. 调整首页 scroll-view 属性及 banner 背景样式
4. 完善积分规则校验逻辑,增加时区及策略格式验证
5. 更新协议草案文档,补充资料清单及功能说明
6. 修复分析结果路由路径,适配新的匹配结果页面
7. 调整品牌 Logo 安卓端字体对齐样式
2026-10-22 11:24:15 +08:00

50 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 微信与手机号登录本地开发(2026-10-21)
## 本轮行为
- 微信首次授权只取得10分钟绑定票据,此时不创建会员、不保存登录Token。
- 用户手工输入中国大陆手机号,通过本次绑定专用短信验证码后登录。手机号已有账户时关联原userId;没有才注册。
- 同一小程序内,每个微信身份和每个账户最多一条映射;绑定冲突明确拒绝,不自动覆盖或合并。
- 已绑定的微信身份后续可直接登录;禁用账户不能登录。资料、报告、积分、累计用量继续归属原userId。
- 微信登录必须确认已发布的用户协议和隐私政策;服务端验证版本与摘要并事务记录同意。协议未发布时既有密码登录例外继续保留,微信及验证码注册不能绕过。
- 前端只在当前页面及原会话仍有效时接受结果,离页、取消、换账户后的迟到响应不会覆盖新会话。
## 范围与接口
本轮开放微信小程序授权适配。Android/iOS沿用公共手机号账户和手工验证码流程,原生微信SDK及对应应用配置留待App接入;H5和原生App隐藏微信入口。保留密码登录。用户后续明确要求保留运营商本机号码一键登录功能,并暂缓渠道准备、先还原按钮;登录页已恢复原一键登录图标及文字,点击显示“一键登录暂未开放”的原提示。实际运营商认证仍为Android/iOS待接入项,服务接通并完成真机验证后启用。
App一键登录与短信验证码登录共用现有账户:服务端验证运营商凭证并取得手机号后,存在则关联原userId,没有才注册,不能信任客户端直接提交的手机号。保留短信登录供其他号码或设备认证不可用时使用。一键登录需要开通认证服务并完成应用配置、授权页及双端真机测试;DCloud方案需要uniCloud核验取号再接入现有PHP后端,具体供应商尚未确定。微信小程序首次登录手输手机号并短信验证的规则继续适用。
三个POST端点,前缀`/api/v1`:
| 端点 | 用途 |
| --- | --- |
| `/auth/wechat-login` | 接收小程序code及两份协议确认,返回待绑定票据或认证结果 |
| `/auth/wechat/sms-code` | 按票据与手机号发送专用绑定验证码 |
| `/auth/wechat/bind-phone` | 核销验证码、关联账户并返回认证结果 |
精确请求与响应见[设计](superpowers/specs/2026-10-21-wechat-sms-login-design.md)。后端独立表、配置、迁移与渠道说明见`D:/AAdesk/202609/airz/database/wechat-login.md`,不得把既有脏schema.sql作为本轮迁移整体执行。
## 本地验证
- 后续按钮恢复验证:一键登录原图标及文字已还原,点击显示原未开放提示,不发认证请求、不保存会话、不改输入内容;微信绑定期间隐藏,取消绑定后恢复。现有19+30回归及29页小程序编译通过;390×844/1280×900受控页面检查通过,微信入口并列显示使用仅测试运行期的平台替身。证据:`D:/AAdesk/202609/airz-backups/quick-login-restore-20261021-r1`,专用浏览器及Vite已关闭。
- `node scripts/test-wechat-login.cjs`:19个实际UTS服务/页面逻辑场景通过,授权、HTTP和设备存储使用替身。
- `node scripts/test-agreements.cjs`:30个协议/登录回归通过,无网络请求。
- HBuilderX5.26:17:28再次完成微信小程序29页编译,退出码0,未上传或发行。
- Playwright:本机H5,390×844和1280×900;普通H5入口隐藏、协议门禁、短信输入、微信绑定、取消、重新授权、验证及成功回跳通过,无相关控制台错误和外网请求。绑定页面通过仅浏览器运行期替换微信授权边界渲染,页面和HTTP服务代码保持真实,不能替代微信真机授权验收。
- H5编译器对既有`services/layout.uts`的窗口尺寸API类型报告4项警告;页面运行、交互及小程序编译未失败,本轮未改动该文件。
- 后端测试、审查和收尾证据见仓库外`D:/AAdesk/202609/airz-backups/wechat-sms-login-20261021-r1`。后端使用全新本机隔离数据库/Redis/ROOT,未加载生产.env;微信、短信均为测试供应商。
- 后端394项检查、85次本机HTTP及多进程并发通过,主代理独立复跑通过;短信71项、账户短信271项、会话284项回归通过,13个PHP文件语法通过。独立审查两项问题均补失败测试并修复,定向复核通过。
- 既有无关改动和脏schema.sql保持。隔离表/Redis已清空、仅本轮数据库已删除、所属服务退出、端口释放、随机测试凭据移除;专用浏览器和Vite已关闭。Redis停止的连接重置导致清理工具中断,确认服务实际退出后已完成收尾,详见仓库外`backend/cleanup.json`。
## 启用前待办
1. 补齐主体等资料,审核并正式发布用户协议及隐私政策;本轮未把草案发布为正式协议。
2. 审核独立身份表SQL、生产备份与恢复步骤,另行授权迁移和部署。
3. 配置真实小程序AppID/Secret及可用短信渠道。微信配置默认关闭,凭据只存服务端环境。
4. 完成测试环境真实短信、小程序真机授权、新老账户绑定及回跳验收,再决定发行。
5. Android/iOS阶段分别接入原生授权SDK、应用配置与真机验证,不能把跨应用OpenID视为同一身份。
6. 保留并接入Android/iOS运营商本机号码一键登录;确认服务商、开通及费用、完成服务端核验和统一账户关联、授权页与真机验证后开放入口,同时保留短信登录。
本轮仅本地开发,未提交、推送、创建PR、发布或修改生产环境,也未发送真实短信或调用微信/模型服务。