144 lines
3.8 KiB
Markdown
144 lines
3.8 KiB
Markdown
# 小程序二维码功能实现说明
|
||
|
||
## 功能概述
|
||
在中医诊断管理页面中,为每个患者添加了"小程序二维码"功能,点击后可生成微信小程序二维码,用于患者扫码进入小程序挂号页面。
|
||
|
||
## 实现内容
|
||
|
||
### 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个字符(已优化使用简短参数名)
|