5.2 KiB
5.2 KiB
小程序二维码功能实现总结
实现状态:✅ 完成并优化
最新更新(2024-03-06)
问题修复
- ✅ 修复 AccessToken 无效错误(errcode 40001)
- ✅ 添加详细的日志记录
- ✅ 自动清除无效的 AccessToken 缓存
- ✅ 改进错误提示信息
- ✅ 添加保存图片失败检测
新增工具
- ✅ 创建缓存清除脚本:
server/clear_wx_token_cache.php - ✅ 创建调试指南:
QRCODE_DEBUG_GUIDE.md
修改的文件
前端文件
-
admin/src/views/tcm/diagnosis/index.vue- 添加小程序二维码按钮点击事件
- 实现二维码生成逻辑
- 添加二维码显示弹窗
- 集成加载状态和错误处理
-
admin/src/api/tcm.ts- 已存在
generateMiniProgramQrcode()接口(无需修改)
- 已存在
后端文件
-
server/app/adminapi/controller/tcm/DiagnosisController.phpgenerateMiniProgramQrcode()方法(已存在)
-
server/app/adminapi/logic/tcm/DiagnosisLogic.php⭐ 已优化generateMiniProgramQrcode()- 主方法getMiniProgramConfig()- 获取配置generateWxQrcode()- 生成二维码(已优化)- ✅ 添加详细日志记录
- ✅ 改进错误处理
- ✅ 自动清除无效缓存
getWxAccessToken()- 获取Token(已优化)- ✅ 添加错误检测
- ✅ 记录原始响应
- ✅ 详细的错误信息
httpGet()/httpPost()- HTTP工具
-
server/app/adminapi/validate/tcm/DiagnosisValidate.phpsceneGenerateQrcode()- 验证规则(已存在)
新增文件
server/clear_wx_token_cache.php- AccessToken缓存清除工具QRCODE_DEBUG_GUIDE.md- 问题排查指南
核心功能
1. 前端功能
- ✅ 点击按钮触发生成
- ✅ 验证小程序配置
- ✅ 调用后端接口
- ✅ 显示加载状态
- ✅ 展示二维码图片
- ✅ 错误提示
- ✅ 支持重新生成
2. 后端功能
- ✅ 获取小程序配置(AppID、AppSecret)
- ✅ 获取微信AccessToken(带缓存)
- ✅ 调用微信API生成小程序码
- ✅ 保存二维码图片到本地
- ✅ 返回图片URL
- ✅ 参数验证
- ✅ 错误处理
- ✅ 详细日志记录
- ✅ 自动缓存清除
技术要点
微信小程序码生成
- API:
https://api.weixin.qq.com/wxa/getwxacodeunlimit - 方式: 无限制生成(通过scene参数)
- 参数传递:
id={诊单ID}&share_user={分享用户ID} - 跳转页面:
pages/order/monad/monad
AccessToken管理(已优化)
- 自动获取并缓存
- 缓存时长: 7000秒
- 避免频繁请求微信服务器
- ✅ 错误时自动清除缓存
- ✅ 详细的日志记录
图片存储
- 路径:
public/uploads/qrcode/{日期}/ - 命名:
qrcode_{appId}_{md5}_{timestamp}.png - 自动创建目录
- ✅ 保存失败检测
日志记录(新增)
- 记录所有关键步骤
- 记录微信API响应
- 记录错误详情
- 日志位置:
server/runtime/log/
接口信息
接口: /adminapi/tcm.diagnosis/generateMiniProgramQrcode
请求参数:
{
"diagnosis_id": 123,
"patient_id": 456,
"share_user_id": 789
}
返回数据:
{
"code": 1,
"msg": "success",
"data": {
"qrcode_url": "http://domain.com/uploads/qrcode/20240306/xxx.png",
"diagnosis_id": 123,
"patient_id": 456
}
}
使用说明
配置步骤
- 进入后台:渠道设置 -> 微信小程序设置
- 填写 AppID 和 AppSecret
- 保存配置
使用步骤
- 进入:中医管理 -> 诊断管理
- 找到患者记录
- 点击"小程序二维码"按钮
- 查看生成的二维码
- 使用微信扫描
问题排查
遇到 AccessToken 错误时
方法1: 使用清除脚本(推荐)
cd server
php clear_wx_token_cache.php
方法2: 手动清除缓存
rm -rf server/runtime/cache/*
方法3: 查看日志
tail -f server/runtime/log/$(date +%Y%m%d).log
常见错误
- 40001: AccessToken无效 → 清除缓存重试
- 40013: AppID无效 → 检查配置
- 40125: AppSecret无效 → 重置AppSecret
- 40164: IP不在白名单 → 添加服务器IP
详细排查步骤请参考:QRCODE_DEBUG_GUIDE.md
权限要求
- 权限标识:
tcm.diagnosis/guahao
注意事项
- ⚠️ 必须先配置小程序 AppID 和 AppSecret
- ⚠️ 服务器需要能访问微信API
- ⚠️ uploads 目录需要写入权限
- ⚠️ 小程序中需要存在对应页面
- ⚠️ Scene参数最大32个字符
- ⚠️ 如遇到AccessToken错误,使用清除脚本
测试建议
- ✅ 测试正常生成流程
- ✅ 测试未配置小程序的情况
- ✅ 测试重新生成功能
- ✅ 测试扫码跳转
- ✅ 测试并发生成
- ✅ 测试AccessToken缓存
- ✅ 测试错误恢复(清除缓存后重试)
相关文档
MINI_PROGRAM_QRCODE_FEATURE.md- 详细功能说明TEST_MINI_PROGRAM_QRCODE.md- 测试指南QRCODE_DEBUG_GUIDE.md- 问题排查指南(新增)
完成时间
- 初始实现: 2024-03-06
- 优化更新: 2024-03-06
开发者备注
- 后端功能已经完整实现
- 本次主要完善前端调用逻辑
- 添加详细日志和错误处理
- 提供问题排查工具和文档
- 修复 AccessToken 无效问题