新增功能

This commit is contained in:
Your Name
2026-03-04 15:32:30 +08:00
parent a07e844c47
commit ab77f5488d
2266 changed files with 177942 additions and 3444 deletions
+293
View File
@@ -0,0 +1,293 @@
# 小程序后端接口配置完成
## 已创建的文件
### 1. 控制器
`server/app/api/controller/TcmController.php`
```php
<?php
namespace app\api\controller;
use app\adminapi\logic\tcm\DiagnosisLogic;
class TcmController extends BaseApiController
{
public function getPatientSignature()
{
$patientId = $this->request->get('patient_id');
if (!$patientId) {
return $this->fail('患者ID不能为空');
}
$result = DiagnosisLogic::getPatientSignature($patientId);
if ($result === false) {
return $this->fail(DiagnosisLogic::getError());
}
return $this->data($result);
}
}
```
### 2. 逻辑层方法
已在 `server/app/adminapi/logic/tcm/DiagnosisLogic.php` 中添加:
```php
public static function getPatientSignature(int $patientId)
{
// 生成患者的 UserSig
// 返回 sdkAppId, userId, userSig
}
```
## API 接口信息
### 接口地址
```
GET /api/tcm/getPatientSignature
```
### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| patient_id | int | 是 | 患者ID |
### 请求示例
```
GET http://your-domain.com/api/tcm/getPatientSignature?patient_id=2
```
### 响应示例
**成功响应:**
```json
{
"code": 1,
"msg": "success",
"data": {
"sdkAppId": 1400123456,
"userId": "patient_2",
"userSig": "eJwtzMsKgj...",
"expireTime": 86400
}
}
```
**失败响应:**
```json
{
"code": 0,
"msg": "患者ID不能为空",
"data": []
}
```
## 小程序端配置
### 修改 API 地址
`wx/TUICallKit/pages/call.vue` 中,修改第47行:
```javascript
// 开发环境
url: 'http://localhost:8000/api/tcm/getPatientSignature',
// 或生产环境
url: 'https://your-domain.com/api/tcm/getPatientSignature',
```
### 完整的小程序端代码
```javascript
// 从后端获取签名
const getSignatureFromServer = async (patientId) => {
return new Promise((resolve, reject) => {
uni.request({
url: 'http://your-domain.com/api/tcm/getPatientSignature',
method: 'GET',
data: {
patient_id: patientId
},
success: (res) => {
if (res.data && res.data.code === 1) {
resolve(res.data.data);
} else {
reject(new Error(res.data.msg || '获取签名失败'));
}
},
fail: (err) => {
reject(err);
}
});
});
};
```
## 测试步骤
### 1. 测试后端接口
使用浏览器或 Postman 测试:
```
http://localhost:8000/api/tcm/getPatientSignature?patient_id=2
```
**预期响应:**
```json
{
"code": 1,
"msg": "success",
"data": {
"sdkAppId": 1400xxx,
"userId": "patient_2",
"userSig": "xxx...",
"expireTime": 86400
}
}
```
### 2. 测试小程序端登录
1. 打开微信开发者工具
2. 打开小程序项目
3. 进入通话页面
4. 输入患者ID: `2`
5. 点击"登录"按钮
6. 查看控制台日志
**预期日志:**
```
获取签名成功: { sdkAppId: xxx, userId: 'patient_2', userSig: 'xxx' }
TUICallKit 初始化成功, userId: patient_2
```
### 3. 测试 Web 端呼叫小程序
1. 确保小程序端已登录(患者ID: 2)
2. 在 Web 端医生后台,找到患者ID为2的诊单
3. 点击"视频通话"按钮
4. 小程序端应该收到来电通知
## 常见问题
### 问题1: 接口404
**症状:**
```
GET http://localhost:8000/api/tcm/getPatientSignature?patient_id=2
404 Not Found
```
**解决方案:**
1. 检查控制器文件是否存在:`server/app/api/controller/TcmController.php`
2. 检查命名空间是否正确:`namespace app\api\controller;`
3. 清除缓存:`php think clear`
4. 重启服务器
### 问题2: 获取签名失败
**症状:**
```json
{
"code": 0,
"msg": "请先配置腾讯云TRTC参数",
"data": []
}
```
**解决方案:**
在后台配置腾讯云 TRTC 参数(SDKAppID 和 SecretKey
### 问题3: 跨域问题
**症状:**
```
Access to XMLHttpRequest at 'http://localhost:8000/api/tcm/getPatientSignature'
from origin 'http://localhost:5173' has been blocked by CORS policy
```
**解决方案:**
在后端配置 CORS 允许跨域访问
### 问题4: 小程序请求失败
**症状:**
```
request:fail url not in domain list
```
**解决方案:**
1. 在微信公众平台配置服务器域名
2. 或在微信开发者工具中勾选"不校验合法域名"
## 完整流程图
```
小程序端 后端服务器 Web端
| | |
|-- 1. 输入患者ID: 2 | |
| | |
|-- 2. 请求签名 ------------>| |
| GET /api/tcm/ | |
| getPatientSignature | |
| ?patient_id=2 | |
| | |
| |-- 3. 生成 UserSig |
| | userId: patient_2 |
| | |
|<-- 4. 返回签名 ------------| |
| { userId: patient_2, | |
| userSig: xxx } | |
| | |
|-- 5. 初始化 TUICallKit | |
| 登录 IM | |
| | |
|-- 6. 保持在线 | |
| | |
| | |-- 7. 医生点击"视频通话"
| | |
| |<-- 8. 请求签名 -----------|
| | POST /adminapi/tcm. |
| | diagnosis/ |
| | getCallSignature |
| | |
| |-- 9. 返回签名 ----------->|
| | { patientUserId: |
| | patient_2 } |
| | |
| | |-- 10. 发起通话
| | | 目标: patient_2
| | |
|<-- 11. 收到来电 ------------------------------------ IM服务器
| | |
|-- 12. 接听/拒绝 | |
| | |
```
## 下一步
1. ✅ 后端接口已创建
2. ✅ 逻辑层方法已添加
3. ⏳ 修改小程序端 API 地址
4. ⏳ 测试后端接口
5. ⏳ 测试小程序端登录
6. ⏳ 测试 Web 端呼叫小程序
## 注意事项
1. **API 地址**:根据实际部署环境修改
2. **跨域配置**:如果小程序和后端不在同一域名,需要配置 CORS
3. **HTTPS**:生产环境必须使用 HTTPS
4. **域名白名单**:小程序需要在微信公众平台配置服务器域名
5. **日志记录**:已添加详细日志,方便调试
## 相关文件
- 控制器:`server/app/api/controller/TcmController.php`
- 逻辑层:`server/app/adminapi/logic/tcm/DiagnosisLogic.php`
- 小程序端:`wx/TUICallKit/pages/call.vue`
- 配置指南:`MINIPROGRAM_SETUP_GUIDE.md`