新增功能
This commit is contained in:
@@ -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`
|
||||
Reference in New Issue
Block a user