智慧教务系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

8.3 KiB

PHP后端开发任务记录

最新完成任务

微信自动登录功能完整实现 (2025-07-31)

任务描述

在学员登录页面新增微信自动登录功能,支持微信小程序openid登录,未绑定用户可通过webview获取公众号openid进行账号绑定。

实现内容

1. 后端接口开发

  • 微信登录接口: POST /api/login/wechat
    • 支持小程序openid登录
    • 返回特殊错误码10001表示需要绑定
  • 微信绑定接口: POST /api/wechat/bind
    • 支持小程序openid + 公众号openid + 手机号 + 验证码绑定
  • 获取授权URL接口: GET /api/wechat/auth_url
    • 生成微信公众号授权链接
  • 授权回调接口: GET /api/wechat/callback
    • 处理微信公众号授权回调

2. 数据库字段利用

  • CustomerResources表字段:
    • miniopenid: 存储微信小程序openid
    • wechatopenid: 存储微信公众号openid
    • login_ip, login_count, login_time: 登录信息记录

3. 前端功能实现

  • 登录页面增强:
    • 添加"微信一键登录"按钮(仅学员端显示)
    • 微信登录流程处理
    • 绑定成功后自动登录
  • 微信绑定页面:
    • webview显示微信授权页面
    • 手机号验证码绑定表单
    • 完整的用户交互流程

4. 技术实现

  • UnifiedLoginService扩展:
    • 添加 wechatLogin 方法:微信openid登录
    • 添加 wechatBind 方法:微信账号绑定
    • 集成现有短信验证码系统
  • WechatService新增:
    • 微信公众号配置获取
    • 授权URL生成
    • 授权回调处理
    • HTTP请求封装
  • WechatLogin控制器:
    • 统一的微信登录接口管理
    • 完善的错误处理和参数验证

5. 安全特性

  • 绑定限制: 已绑定微信的账号无法重复绑定
  • openid唯一性: 同一openid不能绑定多个账号
  • 验证码验证: 集成现有短信验证码系统
  • 授权安全: 使用state参数传递小程序openid

接口测试结果

  • 微信登录接口: 正确返回需要绑定提示(错误码10001)
  • 获取授权URL接口: 正确生成微信公众号授权链接
  • 配置读取: 正确从数据库获取微信公众号配置
  • 参数验证: 完善的参数校验和错误提示

修改的文件

  1. 后端文件:

    • niucloud/app/service/api/login/UnifiedLoginService.php - 添加微信登录和绑定方法
    • niucloud/app/api/controller/login/WechatLogin.php - 新增微信登录控制器
    • niucloud/app/service/api/login/WechatService.php - 新增微信服务类
    • niucloud/app/api/route/route.php - 添加微信登录路由
  2. 前端文件:

    • uniapp/pages/student/login/login.vue - 添加微信登录按钮和逻辑
    • uniapp/pages/student/login/wechat-bind.vue - 新增微信绑定页面
    • uniapp/api/apiRoute.js - 添加微信登录API接口
    • uniapp/pages.json - 添加绑定页面路由

业务流程

  1. 首次登录流程:

    • 用户点击"微信一键登录" → 获取小程序openid → 调用微信登录接口
    • 返回需要绑定提示 → 显示绑定确认弹窗 → 打开webview授权页面
    • 用户完成微信授权 → 显示绑定表单 → 输入手机号和验证码 → 完成绑定
    • 自动返回登录页面 → 自动执行微信登录 → 登录成功
  2. 已绑定用户登录:

    • 用户点击"微信一键登录" → 获取小程序openid → 调用微信登录接口
    • 直接登录成功 → 跳转到首页

技术特点

  • 完整流程: 从获取openid到绑定到登录的完整闭环
  • 用户体验: 流畅的交互流程,清晰的状态提示
  • 安全可靠: 多重验证,防止重复绑定和恶意操作
  • 兼容性: 与现有登录系统完美集成
  • 可扩展: 预留了更多微信功能的扩展空间

历史完成任务

完整实现个人资料接口功能 (2025-07-29)

任务描述

根据前端 uniapp/TASK.md 中完成的个人资料页面,实现对应的后端API接口,支持员工个人资料的查看和编辑功能。

实现内容

1. 扩展API接口功能

  • 接口路径:
    • GET /api/personnel/info - 获取员工个人资料
    • POST /api/personnel/edit - 更新员工个人资料

2. 数据库表支持

  • 基础信息表: school_personnel
    • 包含:姓名、性别、生日、电话、邮箱、微信号、学历、家庭住址、祖籍、个人简介、应急联系人电话、身份证正反面等
  • 详细信息表: school_personnel_info
    • 包含:花名、门店、民族、年龄、司龄、转正时间、是否转正、政治面貌、毕业院校、专业、毕业时间、婚姻状况、银行卡号、开户行、备注等

3. 技术实现

  • PersonnelService扩展:

    • 修改 info 方法:同时查询两个表,返回包含 info 对象的完整数据
    • 修改 edit 方法:使用事务同时更新两个表的数据
    • 添加PersonnelInfo模型引用
  • Personnel控制器优化:

    • 修改 edit 方法:支持接收完整的数据结构,包括 info 对象
    • 添加字段存在性检查,避免undefined key错误
    • 改进错误处理和返回消息

4. 数据格式

获取接口响应格式:

{
  "code": 1,
  "msg": "操作成功",
  "data": {
    "id": 7,
    "name": "麒麟老师",
    "head_img": "",
    "gender": 1,
    "phone": "19218917377",
    "email": "258785420@qq.com",
    "address": "北京市海淀区",
    "native_place": "山东青岛",
    "education": "硕士",
    "profile": "资深市场经理...",
    "emergency_contact_phone": "13900139000",
    "info": {
      "name": "麒麟",
      "store": "海淀校区",
      "ethnicity": "汉族",
      "age": 31,
      "politics": "党员",
      "university": "清华大学",
      "major": "工商管理",
      "graduation_date": "2014-06-30",
      "marital_status": "已婚",
      "bank_card": "6222021234567890124",
      "bank_name": "建设银行北京分行",
      "remark": "优秀员工..."
    }
  }
}

保存接口请求格式:

{
  "name": "麒麟老师",
  "gender": 1,
  "phone": "19218917377",
  "email": "258785420@qq.com",
  "address": "北京市海淀区",
  "native_place": "山东青岛",
  "education": "硕士",
  "profile": "资深市场经理...",
  "emergency_contact_phone": "13900139000",
  "info": {
    "name": "麒麟",
    "store": "海淀校区",
    "ethnicity": "汉族",
    "age": 31,
    "politics": "党员",
    "university": "清华大学",
    "major": "工商管理"
  }
}

5. 测试验证

  • 获取接口测试: 使用curl验证数据正确返回,包含完整的基础信息和详细信息
  • 保存接口测试: 使用curl验证数据正确保存到两个表
  • 更新接口测试: 使用curl验证数据正确更新
  • 数据库验证: 直接查询数据库确认数据正确存储
  • 事务处理: 确保数据一致性,失败时正确回滚

6. 业务逻辑

  • 数据完整性: 使用数据库事务确保两个表的数据同步更新
  • 字段映射: 正确处理基础信息和详细信息的字段分离
  • 错误处理: 完善的异常捕获和错误信息返回
  • 权限控制: 员工只能查看和编辑自己的个人资料

7. 前端集成状态

  • 数据回显: 前端页面能够正确获取和显示所有字段数据
  • 数据保存: 前端页面能够正确保存所有字段数据
  • 字段完整性: 支持前端页面的所有功能需求
  • API兼容性: 保持与前端调用方式的完全兼容

修改的文件

  1. niucloud/app/service/api/apiService/PersonnelService.php

    • 添加PersonnelInfo模型引用
    • 扩展info方法支持详细信息查询
    • 扩展edit方法支持两表联合更新
  2. niucloud/app/api/controller/apiController/Personnel.php

    • 优化edit方法支持完整数据结构
    • 添加字段存在性检查
    • 改进错误处理

技术特点

  • 事务安全: 使用数据库事务确保数据一致性
  • 向后兼容: 保持现有API接口的兼容性
  • 错误处理: 完善的异常处理和错误信息返回
  • 数据验证: 支持字段的存在性检查
  • 模块化设计: 清晰的数据层分离和业务逻辑封装

最后更新:2025-07-31 状态:微信自动登录功能已完成并测试通过,可部署到服务器进行完整测试