# 架构决策：下线未实现的微信网页 OAuth

> 日期：2026-08-02  
> 决策：删除 `GET /api/wechat/authorize`、`GET /api/wechat/callback` 与 `WECHAT_REDIRECT_URI`  
> 保留：微信小程序手机号核验登录 `/api/user/wx-phone-login`

## 背景

旧代码保留了一组公开网页 OAuth demo：授权地址使用 `qrconnect`，回调没有向微信换取身份，而是把请求中的 `code` 拼成 `demo_openid_` 后返回“微信授权成功”。它不签发 Petstore session，但会对外表达不存在的身份核验结果，也让生产发布多维护一个实际不使用的 `WECHAT_REDIRECT_URI`。

当前试点只有小程序登录：客户端通过 `getPhoneNumber` 与 `wx.login` 获取一次性 code，后端 `WechatMiniProgramService` 分别向微信换取已核验手机号和 openid/unionid，再由 `/api/user/wx-phone-login` 建立真实账号与 session。Admin、H5 和小程序源码均未调用旧网页 OAuth 端点。

## 决策

1. 删除 `WechatController` 与只服务于它的 `WechatConfig`；旧路径不再公开放行，也不提供伪成功兼容响应。
2. 生产配置和 release preflight 不再要求 `WECHAT_REDIRECT_URI`；`WECHAT_APPID`、`WECHAT_APPSECRET` 继续作为小程序服务必填项。
3. 从机器本体和动作文档删除两个 deprecated/gap 入口，使本体只描述实际存在的 HTTP 契约。
4. 不在本阶段补做 PC 扫码登录、公众号网页授权或第二套账号绑定模型；未来若有真实场景，必须以独立 PRD、威胁模型和新 API 契约重新设计。

## 兼容与发布影响

- 数据库无迁移，现有 session、用户、预约、报告和小程序登录不受影响。
- 若外部仍请求旧路径，将不再得到 demo 成功响应；这属于预期的 fail-closed 行为。
- 生产环境文件应删除废弃变量，避免运维人员误以为仍需配置网页回调。
- 三角色验收继续只验证微信小程序手机号核验、员工邀请手机号一致性和旧注册入口 410，不验证网页 OAuth。
