pangu-user-platform/docs/02-技术方案/H5会员接口需求与技术方案.md

17 KiB
Raw Permalink Blame History

H5 会员管理接口需求与技术方案

作者pangu
创建时间2026-02-02
更新时间2026-02-04
版本v1.2


一、需求概述

为H5前端提供会员管理相关接口包括认证、注册、个人信息管理、教育身份管理、学生绑定等功能。


二、接口需求设计

2.1 认证模块OAuth 2.0

2.1.1 密码登录

项目 说明
接口 POST /h5/auth/login/password
请求参数 phone手机号、password密码、captchaCode图形验证码、uuid验证码标识、rememberMe记住我
返回 accessToken、refreshToken、expiresIn、会员基本信息

2.1.2 短信验证码登录

项目 说明
接口 POST /h5/auth/login/sms
请求参数 phone手机号、smsCode短信验证码、captchaCode图形验证码、uuid
短信平台 阿里云短信服务
返回 accessToken、refreshToken、expiresIn、会员基本信息

2.1.3 获取图形验证码

项目 说明
接口 GET /h5/auth/captcha
返回 uuid、captchaImgBase64图片

2.1.4 发送短信验证码(阿里云)

项目 说明
接口 POST /h5/auth/sms/send
请求参数 phone、captchaCode、uuid、typelogin/register
短信平台 阿里云短信服务
返回 发送结果、倒计时秒数60秒

2.1.5 刷新Token

项目 说明
接口 POST /h5/auth/refresh
请求参数 refreshToken
返回 新的 accessToken、refreshToken

2.1.6 退出登录

项目 说明
接口 POST /h5/auth/logout

2.1.7 微信扫码登录

2.1.7.1 获取微信扫码登录二维码
项目 说明
接口 GET /h5/auth/wechat/qrcode
返回 qrcodeUrl二维码URL、ticket二维码凭证、expireSeconds有效期秒数
有效期 默认5分钟
2.1.7.2 查询微信扫码状态
项目 说明
接口 GET /h5/auth/wechat/status/{ticket}
返回 statuswaiting/scanned/confirmed/expired、tempCode确认后返回
轮询建议 每2秒查询一次
2.1.7.3 微信扫码登录
项目 说明
接口 POST /h5/auth/wechat/login
请求参数 ticket二维码凭证、tempCode临时登录码
返回 needBindPhone=false时返回TokenneedBindPhone=true时返回bindToken需绑定手机号
2.1.7.4 发送微信绑定手机号短信验证码
项目 说明
接口 POST /h5/auth/wechat/sms/send
请求参数 phone手机号、captchaCode图形验证码、uuid
业务场景 微信首次登录时绑定手机号
2.1.7.5 微信登录绑定手机号
项目 说明
接口 POST /h5/auth/wechat/bindPhone
请求参数 bindToken、phone、smsCode、captchaCode、uuid
业务逻辑 手机号已存在则绑定到现有账号,否则创建新会员
返回 accessToken、refreshToken
2.1.7.6 微信回调处理
项目 说明
接口 GET /h5/auth/wechat/callback
请求参数 code微信授权码、state即ticket
业务场景 前端回调页面收到微信code后调用

2.2 注册模块

2.2.1 注册 - 提交基本信息

项目 说明
接口 POST /h5/auth/register
请求参数 phone、smsCode、captchaCode、uuid、password
短信平台 阿里云短信服务
业务逻辑 1. 校验手机号未注册
2. 校验验证码
3. 创建会员账号
4. 自动登录返回Token
返回 accessToken、refreshToken、memberId

2.2.2 完善身份信息(可选)

项目 说明
接口 POST /h5/member/identity
请求参数 identityTypeparent/teacher

2.3 会员信息模块

2.3.1 获取当前会员信息

项目 说明
接口 GET /h5/member/info
返回 memberId、memberCode、phone脱敏、nickname、avatar、gender、birthday、registerTime、educations教育身份列表、students绑定学生列表

2.3.2 修改会员基本信息

项目 说明
接口 PUT /h5/member/info
可修改字段 nickname昵称、gender性别、birthday生日
备注 手机号不可修改

2.4 密码管理

2.4.1 修改密码

项目 说明
接口 PUT /h5/member/password
请求参数 oldPassword当前密码、newPassword新密码、confirmPassword确认新密码
校验 新密码至少6位包含字母、数字或符号

2.5 教育身份管理(多教育身份)

设计说明:一个会员可以有多个教育身份(如同时在多个班级任教),每个教育身份独立管理。

2.5.1 添加教育身份

项目 说明
接口 POST /h5/member/educations
请求参数 schoolId学校、schoolGradeId年级、schoolClassId班级、subjectId学科
业务逻辑 添加一条教育身份记录,支持多条

2.5.2 获取教育身份列表

项目 说明
接口 GET /h5/member/educations
返回 教育身份列表每条包含educationId、学校、年级、班级、学科名称及ID、是否默认

2.5.3 修改教育身份

项目 说明
接口 PUT /h5/member/educations/{educationId}
请求参数 schoolId学校、schoolGradeId年级、schoolClassId班级、subjectId学科
业务逻辑 修改指定教育身份的信息

2.5.4 删除教育身份

项目 说明
接口 DELETE /h5/member/educations/{educationId}
业务逻辑 删除指定的教育身份记录

2.5.5 设置默认教育身份

项目 说明
接口 PUT /h5/member/educations/{educationId}/default
业务逻辑 将指定教育身份设为默认,其他教育身份自动取消默认状态

2.6 绑定学生管理(家长/教师均可)

2.6.1 绑定学生

项目 说明
接口 POST /h5/member/student
请求参数 studentName学生姓名、studentNo学号、birthday出生日期、gender性别、regionId地区、schoolId、schoolGradeId、schoolClassId
业务逻辑 1. 创建学生记录
2. 关联当前会员
3. 家长和教师身份均可绑定学生

2.6.2 获取绑定的学生列表

项目 说明
接口 GET /h5/member/students
返回 学生列表(含学校、年级、班级名称)

2.6.3 修改学生信息

项目 说明
接口 PUT /h5/member/student/{studentId}
请求参数 同绑定学生

2.6.4 解绑学生

项目 说明
接口 DELETE /h5/member/student/{studentId}

2.7 基础数据接口(公开)

接口 说明
GET /h5/base/regions 获取区域树(省市区)
GET /h5/base/schools?regionId=xxx 根据区域获取学校列表
GET /h5/base/grades?schoolId=xxx 根据学校获取年级列表
GET /h5/base/classes?schoolGradeId=xxx 根据年级获取班级列表
GET /h5/base/subjects 获取学科列表

2.8 操作日志

2.8.1 获取操作日志列表

项目 说明
接口 GET /h5/member/logs
请求参数 pageNum页码默认1、pageSize每页条数默认10
返回 分页的操作日志列表操作类型、操作内容、操作时间、IP地址等
业务场景 用户查看自己的操作记录

2.9 接口规范

规范项 说明
认证方式 OAuth 2.0 Bearer TokenHeader: Authorization: Bearer {accessToken}
Token有效期 accessToken: 2小时refreshToken: 7天记住我30天
响应格式 { code: 200, msg: "success", data: {...} }
错误码 401-未认证403-无权限10001-验证码错误10002-密码错误10003-手机号已注册
短信服务 阿里云短信

三、技术方案

3.1 项目结构设计

pangu-business 模块下新建 h5 包:

backend/pangu-modules/pangu-business/src/main/java/org/dromara/pangu/
├── h5/                                    # H5接口模块
│   ├── config/
│   │   └── H5SmsProperties.java           # 短信防刷配置类
│   ├── controller/
│   │   ├── H5AuthController.java          # 认证接口(含微信登录)
│   │   ├── H5MemberController.java        # 会员信息接口(含多教育身份)
│   │   └── H5BaseDataController.java      # 基础数据接口
│   ├── service/
│   │   ├── H5AuthService.java             # 认证服务接口
│   │   ├── impl/
│   │   │   └── H5AuthServiceImpl.java     # 认证服务实现(含微信登录)
│   │   ├── H5MemberService.java           # 会员服务接口
│   │   └── impl/
│   │       └── H5MemberServiceImpl.java   # 会员服务实现
│   └── domain/
│       ├── dto/                           # 请求DTO
│       │   ├── H5PasswordLoginDto.java    # 密码登录
│       │   ├── H5SmsLoginDto.java         # 短信登录
│       │   ├── H5RegisterDto.java         # 注册
│       │   ├── H5SmsSendDto.java          # 发送短信
│       │   ├── H5MemberUpdateDto.java     # 会员信息修改
│       │   ├── H5PasswordUpdateDto.java   # 密码修改
│       │   ├── H5EducationDto.java        # 教育身份
│       │   ├── H5StudentBindDto.java      # 绑定学生
│       │   ├── WechatLoginDto.java        # 微信登录
│       │   └── WechatBindPhoneDto.java    # 微信绑定手机号
│       └── vo/                            # 响应VO
│           ├── H5LoginVo.java             # 登录响应
│           ├── H5CaptchaVo.java           # 验证码响应
│           ├── H5MemberInfoVo.java        # 会员信息(含教育身份列表)
│           ├── H5EducationVo.java         # 教育身份
│           ├── H5StudentVo.java           # 学生信息
│           ├── H5MemberLogVo.java         # 操作日志
│           ├── WechatQrcodeVo.java        # 微信二维码
│           ├── WechatStatusVo.java        # 微信扫码状态
│           └── WechatLoginVo.java         # 微信登录响应

3.2 接口路径规划

模块 路径前缀 认证要求
认证接口 /h5/auth/* 无需认证
微信登录 /h5/auth/wechat/* 无需认证
会员接口 /h5/member/* 需要Token
教育身份 /h5/member/educations/* 需要Token
学生管理 /h5/member/student/* 需要Token
操作日志 /h5/member/logs 需要Token
基础数据 /h5/base/* 无需认证

3.3 认证方案Sa-Token

Token 策略

配置项 说明
Token 存储 Redis 支持分布式
accessToken 有效期 2小时 常规访问
refreshToken 有效期 7天/30天 记住我时30天
Token 传递方式 Header Authorization: Bearer {token}
设备类型 h5 区分多端登录

安全配置

SecurityConfig.java 中添加H5接口放行规则

// H5公开接口无需认证
.excludePathPatterns(
    "/h5/auth/**",      // 登录/注册/验证码
    "/h5/base/**"       // 基础数据
)

3.4 短信服务(阿里云)

复用现有 sms4j 模块(版本 3.3.5),集成阿里云短信服务。

阿里云账号信息

配置项 说明
AccessKey ID LTAI5tQLorTxf9Fzzh93pfGN 阿里云访问密钥
AccessKey Secret NhBZGwac5vvWg60R0Y4UndTsKK4zuh 阿里云密钥
Endpoint dysmsapi.aliyuncs.com 短信API地址
签名 湖北新华教育服务平台 短信签名(已审核通过)

短信模板

模板用途 模板ID 模板内容
登录验证码 SMS_461020580 【湖北新华教育服务平台】您正在申请登录,验证码为:${code}
注册验证码 SMS_473140005 【湖北新华教育服务平台】您正在申请注册,验证码为:${code}
重置密码 SMS_473130008 用于忘记密码(备用)

阿里云配置application-dev.yml

sms:
  config-type: yaml
  restricted: true
  minute-max: 1
  account-max: 30
  blends:
    alibaba:
      supplier: alibaba
      access-key-id: LTAI5tQLorTxf9Fzzh93pfGN
      access-key-secret: NhBZGwac5vvWg60R0Y4UndTsKK4zuh
      signature: 湖北新华教育服务平台

H5短信配置application.yml

h5:
  sms:
    # 是否真正发送短信开发测试设false生产设true
    enabled: true
    sms-config-name: alibaba

    # 短信模板ID
    login-template-id: SMS_461020580
    register-template-id: SMS_473140005

    # 验证码配置
    code-length: 6
    code-expire-minutes: 5

    # 防刷策略
    send-interval-seconds: 60
    daily-limit-per-phone: 10
    minute-limit-per-ip: 5
    daily-limit-per-ip: 50
    blacklist-minutes: 30
    blacklist-trigger-count: 5

防刷策略

层级 策略 配置项 默认值
前置 图形验证码校验 - 必须
手机号 黑名单检查 blacklist-minutes 30分钟
手机号 发送间隔限制 send-interval-seconds 60秒
手机号 每日发送上限 daily-limit-per-phone 10条
IP 黑名单检查 blacklist-minutes 30分钟
IP 每分钟发送上限 minute-limit-per-ip 5条
IP 每日发送上限 daily-limit-per-ip 50条
验证 连续失败自动封禁 blacklist-trigger-count 5次

验证码发送流程

  1. 校验图形验证码
  2. 检查手机号是否在黑名单
  3. 检查IP是否在黑名单
  4. 检查发送间隔60秒
  5. 检查手机号每日上限
  6. 检查IP每分钟上限
  7. 检查IP每日上限
  8. 业务校验(注册:手机号未注册;登录:手机号已注册)
  9. 生成验证码并存入Redis
  10. 更新各项计数器
  11. 调用阿里云API发送测试模式仅打印日志

Redis Key 设计

Key 说明 TTL
h5:sms:code:{type}:{phone} 验证码 5分钟
h5:sms:daily:phone:{date}:{phone} 手机号每日计数 1天
h5:sms:minute:ip:{ip} IP每分钟计数 1分钟
h5:sms:daily:ip:{date}:{ip} IP每日计数 1天
h5:sms:blacklist:phone:{phone} 手机号黑名单 30分钟
h5:sms:blacklist:ip:{ip} IP黑名单 30分钟
h5:sms:fail:{phone} 验证失败计数 5分钟

3.5 数据库设计

复用现有表结构,无需新增表:

  • pg_member - 会员表
  • pg_student - 学生表
  • pg_school / pg_school_grade / pg_school_class - 学校相关
  • pg_region - 区域表
  • pg_subject - 学科表

3.6 依赖关系

H5 Controller
    ↓
H5 Service新建
    ↓
复用现有 Service/Mapper
    ├── IPgMemberService
    ├── IPgStudentService
    ├── IPgSchoolService
    └── 基础数据 Service

四、开发清单

序号 内容 文件
1 DTO类 H5PasswordLoginDto, H5SmsLoginDto, H5RegisterDto, H5SmsSendDto, H5MemberUpdateDto, H5PasswordUpdateDto, H5EducationDto, H5StudentBindDto, WechatLoginDto, WechatBindPhoneDto
2 VO类 H5LoginVo, H5CaptchaVo, H5MemberInfoVo, H5EducationVo, H5StudentVo, H5MemberLogVo, WechatQrcodeVo, WechatStatusVo, WechatLoginVo
3 认证服务 H5AuthService, H5AuthServiceImpl含微信登录
4 会员服务 H5MemberService, H5MemberServiceImpl含多教育身份、操作日志
5 Controller H5AuthController含微信登录, H5MemberController含多教育身份, H5BaseDataController
6 安全配置 SecurityConfig添加放行规则
7 短信配置 application-dev.yml
8 微信配置 微信开放平台AppID、AppSecret配置

最后更新: 2026-02-03