Files
zyt/MINIPROGRAM_BACKEND_SETUP.md
T
2026-03-04 15:32:30 +08:00

294 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 小程序后端接口配置完成
## 已创建的文件
### 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`