实现面向个人客户的 7 个认证接口(A1-A7),覆盖资产验证、 微信公众号/小程序登录、手机号绑定/换绑、退出登录完整流程。 主要变更: - 新增 PersonalCustomerOpenID 模型,支持多 AppID 多 OpenID 管理 - 实现有状态 JWT(JWT + Redis 双重校验),支持服务端主动失效 - 扩展微信 SDK:小程序 Code2Session + 3 个 DB 动态工厂函数 - 实现 A1 资产验证 IP 限流(30/min)和 A4 三层验证码限流 - 新增 7 个错误码(1180-1186)和 6 个 Redis Key 函数 - 注册 /api/c/v1/auth/* 下 7 个端点并更新 OpenAPI 文档 - 数据库迁移 000083:新建 tb_personal_customer_openid 表
2.2 KiB
2.2 KiB
personal-customer Specification
MODIFIED Requirements
Requirement: 个人客户登录主流程改为微信授权
系统 SHALL 将个人客户登录主流程从“手机号 + 验证码登录”调整为“资产验证 + 微信授权登录”。
- 新登录入口:
POST /api/c/v1/auth/verify-asset(A1,无认证)POST /api/c/v1/auth/wechat-login(A2,无认证)POST /api/c/v1/auth/miniapp-login(A3,无认证)
- 请求与响应要点:
- A2/A3 请求体 MUST 包含
code与asset_token - A2/A3 响应体 MUST 包含
token、need_bind_phone、is_new_user
- A2/A3 请求体 MUST 包含
- 错误码:
1006参数错误1002token 无效或过期1040微信授权失败
Scenario: 通过微信授权完成登录
- WHEN 用户先完成 A1,再提交 A2 或 A3
- THEN 系统 SHALL 完成客户识别/创建、资产绑定并返回登录 token
Scenario: 不再支持旧手机号直登入口
- WHEN 客户端调用旧手机号登录路径(如
/api/c/v1/login) - THEN 系统 MUST 按新路由规范拒绝或迁移提示,不再作为主登录路径
Requirement: 手机号从“登录凭据”调整为“登录后补充资料”
系统 MUST 将手机号能力调整为登录后绑定/换绑,而非登录入口。
- 相关接口:
POST /api/c/v1/auth/send-code(A4,无认证)POST /api/c/v1/auth/bind-phone(A5,需认证)POST /api/c/v1/auth/change-phone(A6,需认证)
- 响应字段:
- A5/A6 MUST 返回绑定后的
phone
- A5/A6 MUST 返回绑定后的
Scenario: 首次登录后要求绑定手机号
- WHEN
client.require_phone_binding=true且用户未绑定手机号 - THEN 登录响应 MUST 返回
need_bind_phone=true - THEN 用户通过 A4+A5 完成绑定后进入业务页面
Requirement: 微信身份字段迁移到 OpenID 关联能力
系统 SHALL 保留 PersonalCustomer.wx_open_id 与 wx_union_id 字段的兼容性,但新登录链路 MUST 以 PersonalCustomerOpenID 为主。
Scenario: 读取用户微信身份
- WHEN 登录流程需要按微信身份识别客户
- THEN 系统 MUST 优先查询
PersonalCustomerOpenID - THEN 不再依赖
PersonalCustomer单字段承载多 AppID 场景