# 小程序二维码功能实现说明 ## 功能概述 在中医诊断管理页面中,为每个患者添加了"小程序二维码"功能,点击后可生成微信小程序二维码,用于患者扫码进入小程序挂号页面。 ## 实现内容 ### 1. 后端实现(已完成) #### 控制器 **文件**: `server/app/adminapi/controller/tcm/DiagnosisController.php` 方法:`generateMiniProgramQrcode()` - 接收参数验证 - 调用Logic层生成二维码 #### 逻辑层 **文件**: `server/app/adminapi/logic/tcm/DiagnosisLogic.php` 核心方法: - `generateMiniProgramQrcode()` - 生成小程序码主方法 - `getMiniProgramConfig()` - 获取小程序配置(AppID、AppSecret) - `generateWxQrcode()` - 调用微信API生成小程序码 - `getWxAccessToken()` - 获取微信AccessToken(带缓存) - `httpGet()` / `httpPost()` - HTTP请求工具方法 #### 验证器 **文件**: `server/app/adminapi/validate/tcm/DiagnosisValidate.php` 验证场景:`sceneGenerateQrcode()` - 必填字段:diagnosis_id、patient_id、share_user_id ### 2. 前端实现 #### API接口 **文件**: `admin/src/api/tcm.ts` 接口:`generateMiniProgramQrcode(params)` - 调用后端接口:`/tcm.diagnosis/generateMiniProgramQrcode` #### 页面功能 **文件**: `admin/src/views/tcm/diagnosis/index.vue` 新增功能: - 点击"小程序二维码"按钮,弹出二维码显示弹窗 - 自动获取小程序配置验证是否已配置 - 调用后端接口生成二维码 - 显示二维码图片供扫描 - 支持重新生成二维码 - 加载状态提示 ### 3. 接口详情 **接口地址**: `/adminapi/tcm.diagnosis/generateMiniProgramQrcode` **请求方式**: POST **请求参数**: ```json { "diagnosis_id": 123, // 诊单ID "patient_id": 456, // 患者ID "share_user_id": 789 // 分享用户ID(当前登录用户) } ``` **返回数据**: ```json { "code": 1, "msg": "success", "data": { "qrcode_url": "https://example.com/uploads/qrcode/20240306/qrcode_xxx.png", "diagnosis_id": 123, "patient_id": 456 } } ``` ### 4. 小程序路径 生成的小程序码跳转路径: ``` pages/order/monad/monad ``` Scene参数(通过scene传递): ``` id={诊单ID}&share_user={分享用户ID} ``` ### 5. 技术实现细节 #### 微信小程序码生成 - 使用微信官方API:`https://api.weixin.qq.com/wxa/getwxacodeunlimit` - 支持无限制生成(通过scene参数传递数据) - 二维码宽度:280px - 环境版本:release(正式版) #### AccessToken管理 - 自动获取并缓存AccessToken - 缓存时长:7000秒(提前200秒过期) - 缓存Key:`wx_access_token_{appId}` #### 图片存储 - 存储路径:`public/uploads/qrcode/{日期}/` - 文件命名:`qrcode_{appId}_{scene的MD5}_{时间戳}.png` - 自动创建目录 ### 6. 使用流程 1. 在诊断列表中找到目标患者 2. 点击操作列的"小程序二维码"按钮 3. 系统验证小程序配置是否完整 4. 调用后端接口生成二维码 5. 显示二维码图片在弹窗中 6. 患者使用微信扫描二维码即可进入小程序 7. 如生成失败,可点击"重新生成"按钮 ### 7. 权限控制 使用权限标识:`tcm.diagnosis/guahao` ### 8. 配置要求 需要在系统中配置小程序信息: - 小程序名称 - 原始ID - AppID(必填) - AppSecret(必填) - 小程序二维码 配置路径:渠道设置 -> 微信小程序设置 ## 注意事项 1. 必须先配置小程序AppID和AppSecret 2. 服务器需要能够访问微信API(https://api.weixin.qq.com) 3. 需要有uploads目录的写入权限 4. AccessToken会自动缓存,避免频繁请求微信服务器 5. 生成的二维码图片会保存在服务器本地 6. 小程序页面路径需要在小程序中实际存在 7. Scene参数最大长度为32个字符(已优化使用简短参数名)