feat(api): 接入微信登录并原生实现咨询域(ECR-049/050)
小程序可在 Go 上完成微信手机号登录、测评、预约和下单,不再反代 Java。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -10,13 +10,13 @@
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | 账号登录(手机号+密码) |
|
||||
| Name | 账号登录(小程序微信;H5 过渡账密) |
|
||||
| Purpose | 跨设备持久用户身份;未登录不可生成/查看生日衍生结果 |
|
||||
| Business Goal | 数据归属清晰;为会员与深度版付费打底 |
|
||||
| Business Goal | 数据归属清晰;咨询与魔方同一人;为会员与深度版付费打底 |
|
||||
|
||||
| In | Out |
|
||||
|---|---|
|
||||
| 注册 / 登录 / 登出 / me | 微信 OAuth、短信 OTP(后续) |
|
||||
| 小程序微信登录 / 登出 / me | 短信 OTP |
|
||||
| 设备身份绑定到已注册账号 | 游客可看完整报告 |
|
||||
| Bearer Session | 运营 Admin 登录(独立) |
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
```text
|
||||
进入结果页或建档
|
||||
↓
|
||||
未登录? → /login 注册或登录
|
||||
未登录? → 小程序 login-pop(微信)或 H5 /login(过渡账密)
|
||||
↓
|
||||
Device 绑定到账号 User
|
||||
↓
|
||||
@@ -58,7 +58,8 @@ Device 绑定到账号 User
|
||||
|
||||
| 路由 | 页面 |
|
||||
|---|---|
|
||||
| `/login` | LoginPage(注册/登录切换) |
|
||||
| `/login` | H5 LoginPage(过渡账密;小程序已删除此页) |
|
||||
| 小程序 `login-pop` | 微信手机号授权(唯一 C 端登录) |
|
||||
| `/mine` | 展示账号手机号尾号 + 退出 |
|
||||
|
||||
---
|
||||
@@ -77,8 +78,8 @@ Device 绑定到账号 User
|
||||
|
||||
| ID | Rule |
|
||||
|---|---|
|
||||
| R1 | **临时开放:** 任意非空手机号 + 任意密码均可登录;未注册则自动建号写入 DB |
|
||||
| R2 | 登录/注册统一走 OpenLogin;不校验历史密码,仍会更新 password_hash 记录本次输入 |
|
||||
| R1 | **小程序:** 微信 `code` + 手机号授权登录;按 `wx_openid` 命中,否则按手机号合并历史账密账号;未命中则建号 |
|
||||
| R2 | **H5 过渡:** OpenLogin(任意非空手机号+密码)仍可用,避免 H5 断服;小程序不再提供账密页。正式关掉账密须另改本 Spec |
|
||||
| R3 | 登录成功后:签发 session;device_identities.user_id 改绑到账号 |
|
||||
| R4 | 生成/查看档案与报告 API 必须已注册(users.phone 非空)且有效 session 或已绑设备账号 |
|
||||
| R5 | 登出作废 session;设备可再登录其他账号 |
|
||||
@@ -91,7 +92,7 @@ Device 绑定到账号 User
|
||||
|
||||
## 8. 数据模型影响
|
||||
|
||||
- `users.phone` UNIQUE · `users.password_hash` · `users.nickname` · `users.avatar_url`
|
||||
- `users.phone` UNIQUE · `users.wx_openid` UNIQUE · `users.wx_unionid` · `users.java_platform_user_id` · `users.password_hash` · `users.nickname` · `users.avatar_url`
|
||||
- `user_sessions(token, user_id, expires_at)`
|
||||
- 本地文件:`data/avatars/{user_id}.{jpg|png|webp}`(进程相对路径)
|
||||
|
||||
@@ -101,8 +102,9 @@ Device 绑定到账号 User
|
||||
|
||||
| Method | Path | 说明 |
|
||||
|---|---|---|
|
||||
| POST | `/api/v1/auth/register` | 注册(可带 nickname) |
|
||||
| POST | `/api/v1/auth/login` | 登录 |
|
||||
| POST | `/api/v1/auth/wechat` | 小程序微信登录 `{ code, encryptedData, iv }` |
|
||||
| POST | `/api/v1/auth/register` | H5 过渡注册(可带 nickname) |
|
||||
| POST | `/api/v1/auth/login` | H5 过渡登录 |
|
||||
| POST | `/api/v1/auth/logout` | 登出 |
|
||||
| GET | `/api/v1/auth/me` | 当前账号(含 avatar_url) |
|
||||
| PATCH | `/api/v1/auth/me` | 更新昵称 `{ nickname }` |
|
||||
@@ -158,4 +160,5 @@ Device 绑定到账号 User
|
||||
## 13. AI 开发前检查
|
||||
|
||||
- [x] lexicon:登录/注册/账号
|
||||
- [x] 不碰 Admin Auth
|
||||
- [x] 不碰 Admin Auth
|
||||
- [x] 咨询域见 Spec `consult-miniprogram`(ECR-050)
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# Feature Spec: 小程序咨询域(原生 Go)
|
||||
|
||||
> Status: `Active` · ECR-050
|
||||
|
||||
## 1. 功能定义
|
||||
|
||||
小程序首页/咨询/测评/订单/我的资料不再打 Java。Go 用 PostgreSQL 提供与原 `/psychic/*` 相同的字段合同。
|
||||
|
||||
## 2. Business Rules
|
||||
|
||||
| ID | Rule |
|
||||
|---|---|
|
||||
| C1 | 未登录可看 banner、资讯、测评列表、咨询师、档期、协议 |
|
||||
| C2 | 登录后才能交卷、关注、下单、改资料、反馈 |
|
||||
| C3 | 下单锁时段;取消未支付订单释放时段 |
|
||||
| C4 | 金额单位:分;支付 openid = `users.wx_openid` |
|
||||
| C5 | 测评仅单选计分,按分数区间匹配结果 |
|
||||
| C6 | 协议路径保持历史拼写 `procotol` |
|
||||
|
||||
## 3. API
|
||||
|
||||
全部挂在 `/api/v1/psychic/*`,字段与原 Java App VO 一致(见 ECR-050 BD)。
|
||||
Reference in New Issue
Block a user