# 小程序后端接口配置完成 ## 已创建的文件 ### 1. 控制器 `server/app/api/controller/TcmController.php` ```php 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`