3.8 KiB
3.8 KiB
小程序二维码功能实现说明
功能概述
在中医诊断管理页面中,为每个患者添加了"小程序二维码"功能,点击后可生成微信小程序二维码,用于患者扫码进入小程序挂号页面。
实现内容
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
请求参数:
{
"diagnosis_id": 123, // 诊单ID
"patient_id": 456, // 患者ID
"share_user_id": 789 // 分享用户ID(当前登录用户)
}
返回数据:
{
"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. 使用流程
- 在诊断列表中找到目标患者
- 点击操作列的"小程序二维码"按钮
- 系统验证小程序配置是否完整
- 调用后端接口生成二维码
- 显示二维码图片在弹窗中
- 患者使用微信扫描二维码即可进入小程序
- 如生成失败,可点击"重新生成"按钮
7. 权限控制
使用权限标识:tcm.diagnosis/guahao
8. 配置要求
需要在系统中配置小程序信息:
- 小程序名称
- 原始ID
- AppID(必填)
- AppSecret(必填)
- 小程序二维码
配置路径:渠道设置 -> 微信小程序设置
注意事项
- 必须先配置小程序AppID和AppSecret
- 服务器需要能够访问微信API(https://api.weixin.qq.com)
- 需要有uploads目录的写入权限
- AccessToken会自动缓存,避免频繁请求微信服务器
- 生成的二维码图片会保存在服务器本地
- 小程序页面路径需要在小程序中实际存在
- Scene参数最大长度为32个字符(已优化使用简短参数名)