7.6 KiB
7.6 KiB
小程序后端接口配置完成
已创建的文件
1. 控制器
server/app/api/controller/TcmController.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 中添加:
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
响应示例
成功响应:
{
"code": 1,
"msg": "success",
"data": {
"sdkAppId": 1400123456,
"userId": "patient_2",
"userSig": "eJwtzMsKgj...",
"expireTime": 86400
}
}
失败响应:
{
"code": 0,
"msg": "患者ID不能为空",
"data": []
}
小程序端配置
修改 API 地址
在 wx/TUICallKit/pages/call.vue 中,修改第47行:
// 开发环境
url: 'http://localhost:8000/api/tcm/getPatientSignature',
// 或生产环境
url: 'https://your-domain.com/api/tcm/getPatientSignature',
完整的小程序端代码
// 从后端获取签名
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
预期响应:
{
"code": 1,
"msg": "success",
"data": {
"sdkAppId": 1400xxx,
"userId": "patient_2",
"userSig": "xxx...",
"expireTime": 86400
}
}
2. 测试小程序端登录
- 打开微信开发者工具
- 打开小程序项目
- 进入通话页面
- 输入患者ID:
2 - 点击"登录"按钮
- 查看控制台日志
预期日志:
获取签名成功: { sdkAppId: xxx, userId: 'patient_2', userSig: 'xxx' }
TUICallKit 初始化成功, userId: patient_2
3. 测试 Web 端呼叫小程序
- 确保小程序端已登录(患者ID: 2)
- 在 Web 端医生后台,找到患者ID为2的诊单
- 点击"视频通话"按钮
- 小程序端应该收到来电通知
常见问题
问题1: 接口404
症状:
GET http://localhost:8000/api/tcm/getPatientSignature?patient_id=2
404 Not Found
解决方案:
- 检查控制器文件是否存在:
server/app/api/controller/TcmController.php - 检查命名空间是否正确:
namespace app\api\controller; - 清除缓存:
php think clear - 重启服务器
问题2: 获取签名失败
症状:
{
"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
解决方案:
- 在微信公众平台配置服务器域名
- 或在微信开发者工具中勾选"不校验合法域名"
完整流程图
小程序端 后端服务器 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. 接听/拒绝 | |
| | |
下一步
- ✅ 后端接口已创建
- ✅ 逻辑层方法已添加
- ⏳ 修改小程序端 API 地址
- ⏳ 测试后端接口
- ⏳ 测试小程序端登录
- ⏳ 测试 Web 端呼叫小程序
注意事项
- API 地址:根据实际部署环境修改
- 跨域配置:如果小程序和后端不在同一域名,需要配置 CORS
- HTTPS:生产环境必须使用 HTTPS
- 域名白名单:小程序需要在微信公众平台配置服务器域名
- 日志记录:已添加详细日志,方便调试
相关文件
- 控制器:
server/app/api/controller/TcmController.php - 逻辑层:
server/app/adminapi/logic/tcm/DiagnosisLogic.php - 小程序端:
wx/TUICallKit/pages/call.vue - 配置指南:
MINIPROGRAM_SETUP_GUIDE.md