6.1 KiB
6.1 KiB
小程序端配置指南
问题原因
小程序端之前使用的是本地生成的测试签名(GenerateTestUserSig),这导致:
- ❌ 小程序端和Web端使用了不同的 SDKAppID
- ❌ 小程序端的 UserSig 可能已过期
- ❌ 小程序端没有从后端获取统一的签名
解决方案
已修改 wx/TUICallKit/pages/call.vue,改为从后端获取签名。
配置步骤
步骤1: 修改后端API地址
在 wx/TUICallKit/pages/call.vue 中,找到这一行:
url: 'https://your-domain.com/api/getPatientSignature', // 替换为你的后端地址
替换为你的实际后端地址,例如:
url: 'https://your-domain.com/api/getPatientSignature',
// 或者
url: 'http://localhost:8000/api/getPatientSignature',
步骤2: 创建后端接口
需要在后端创建一个供小程序调用的接口:
// server/app/api/controller/TcmController.php
/**
* @notes 获取患者签名(供小程序调用)
*/
public function getPatientSignature()
{
$patientId = $this->request->get('patient_id');
if (!$patientId) {
return $this->fail('患者ID不能为空');
}
// 调用逻辑层
$result = \app\adminapi\logic\tcm\DiagnosisLogic::getPatientSignature($patientId);
if ($result === false) {
return $this->fail(\app\adminapi\logic\tcm\DiagnosisLogic::getError());
}
return $this->data($result);
}
步骤3: 添加后端逻辑
在 DiagnosisLogic.php 中添加方法:
/**
* @notes 获取患者签名(供小程序调用)
* @param int $patientId
* @return array|bool
*/
public static function getPatientSignature(int $patientId)
{
try {
// 获取配置
$config = self::getTrtcConfig();
if (!$config) {
self::setError('请先配置腾讯云TRTC参数');
return false;
}
// 患者userId
$patientUserId = 'patient_' . $patientId;
// 生成患者的 UserSig
$userSig = self::generateUserSig(
$config['sdkAppId'],
$config['secretKey'],
$patientUserId
);
if (!$userSig) {
self::setError('生成签名失败');
return false;
}
// 确保患者账号已导入IM
self::ensurePatientImAccount($patientId, $patientUserId);
return [
'sdkAppId' => (int)$config['sdkAppId'],
'userId' => $patientUserId,
'userSig' => $userSig,
'expireTime' => 86400
];
} catch (\Exception $e) {
self::setError($e->getMessage());
return false;
}
}
步骤4: 配置路由
在路由文件中添加:
// server/route/api.php
Route::get('getPatientSignature', 'tcm/getPatientSignature');
步骤5: 测试小程序端
- 打开微信开发者工具
- 打开小程序项目
- 进入通话页面
- 输入患者ID:
2 - 点击"登录"
- 查看控制台日志,应该看到:
获取签名成功: { sdkAppId: xxx, userId: 'patient_2', userSig: 'xxx' } TUICallKit 初始化成功, userId: patient_2
步骤6: 测试Web端呼叫小程序
- 确保小程序端已登录(患者ID: 2)
- 在Web端医生后台,找到患者ID为2的诊单
- 点击"视频通话"按钮
- 小程序端应该收到来电通知
使用说明
小程序端登录
- 输入患者ID(数字,如:
2) - 点击"登录"按钮
- 等待初始化完成
- 显示"当前登录: patient_2"
小程序端发起通话
- 登录后,输入要呼叫的用户ID(如:
doctor_1) - 点击"呼叫"按钮
- 发起视频通话
Web端呼叫小程序
- 确保小程序端已登录
- 在Web端点击"视频通话"
- 小程序端会收到来电
关键点
1. userId 格式统一
- 患者:
patient_{id} - 医生:
doctor_{id}
2. SDKAppID 必须一致
Web端和小程序端必须使用相同的 SDKAppID。
3. 从后端获取签名
不要使用本地生成的测试签名,必须从后端获取。
4. 保持在线状态
小程序在后台时可能会断开连接,需要在 onShow 时重新登录。
调试技巧
查看小程序端日志
在微信开发者工具的控制台中查看:
console.log('获取签名成功:', signatureData)
console.log('TUICallKit 初始化成功, userId:', userId)
查看Web端日志
在浏览器控制台中查看:
=== 发起一对一通话 ===
后端返回的 patientUserId: patient_2
最终使用的 targetUserId: patient_2
通话已发起,目标用户: patient_2
常见错误
错误1: 获取签名失败
- 检查后端API地址是否正确
- 检查网络连接
- 检查后端接口是否正常
错误2: 初始化失败
- 检查 SDKAppID 是否正确
- 检查 UserSig 是否有效
- 检查网络连接
错误3: 收不到来电
- 检查小程序端是否已登录
- 检查 userId 格式是否一致
- 检查小程序是否在前台运行
完整流程
小程序端接收来电流程
- 小程序启动
- 输入患者ID(如:2)
- 点击登录
- 从后端获取签名(userId: patient_2)
- 初始化 TUICallKit
- 保持在线状态
- Web端发起通话(目标: patient_2)
- 小程序端收到来电
- 接听或拒绝
Web端发起通话流程
- 医生登录后台
- 找到患者诊单(patient_id: 2)
- 点击"视频通话"
- 从后端获取签名(patientUserId: patient_2)
- 初始化 TUICallKit
- 发起通话(目标: patient_2)
- 等待小程序端接听
注意事项
- 小程序端必须先登录才能接收来电
- userId 格式必须一致:都使用
patient_{id}格式 - SDKAppID 必须相同:Web端和小程序端使用同一个
- 从后端获取签名:不要使用本地测试签名
- 保持在线状态:小程序在后台时可能断开连接
下一步
- 修改小程序端的后端API地址
- 创建后端接口
getPatientSignature - 测试小程序端登录
- 测试Web端呼叫小程序
- 测试小程序端呼叫Web端