5.9 KiB
5.9 KiB
医生IM账号自动导入功能
功能说明
在权限管理-管理员页面,新增或编辑管理员时,系统会自动将医生账号导入到腾讯云IM后台。
实现位置
前端页面
- 文件:
admin/src/views/permission/admin/index.vue - 新增按钮:第45-50行
- 编辑按钮:第133-135行
后端逻辑
- 文件:
server/app/adminapi/logic/auth/AdminLogic.php - 新增方法:
add()- 第30行调用IM导入 - 编辑方法:
edit()- 第70行调用IM导入 - 导入方法:
importDoctorAccountToIm()- 新增的私有方法
账号格式
- 医生账号ID:
doctor_{admin_id} - 例如:管理员ID为1,则IM账号为
doctor_1 - 昵称:使用管理员的名称
使用流程
新增管理员
- 进入:权限管理 > 管理员
- 点击"新增"按钮
- 填写管理员信息(账号、名称、角色等)
- 点击"确定"保存
- ✅ 系统自动导入医生IM账号到腾讯云
编辑管理员
- 进入:权限管理 > 管理员
- 点击某个管理员的"编辑"按钮
- 修改管理员信息
- 点击"确定"保存
- ✅ 系统自动更新医生IM账号信息
验证方法
1. 查看日志
# 查看最新日志
tail -f server/runtime/adminapi/log/当前日期.log
# 成功日志示例:
[info] 开始导入医生IM账号 - admin_id: 1, user_id: doctor_1, name: 管理员
[info] 医生IM账号导入成功 - admin_id: 1, user_id: doctor_1
# 失败日志示例:
[error] 导入医生IM账号异常 - admin_id: 1, error: xxx
2. 查看腾讯云控制台
- 登录腾讯云控制台
- 进入:即时通信IM > 应用列表
- 选择你的应用(SDKAppID: 1600127710)
- 进入:账号管理
- 搜索:
doctor_1(或其他管理员ID) - ✅ 应该能看到该账号
3. 测试视频通话
- 医生端:使用
doctor_1账号登录TUICallKit - 患者端:使用
patient_X账号登录 - 发起通话测试
- ✅ 应该能正常通话
当前问题
ErrorCode 70003: UserSig非法
错误信息:
The UserSig in use is illegal. Please regenerate UserSig through official API.
日志示例:
[2026-03-02T10:38:32+08:00][info] HTTP响应: {"ActionStatus":"FAIL","ErrorCode":70003,"ErrorInfo":"The UserSig in use is illegal..."}
[2026-03-02T10:38:32+08:00][error] 导入IM账号失败 - userId: patient_3, error: 导入账号失败 - ErrorCode: 70003
可能原因:
- ❌ SDKAppID不正确(使用了TRTC的而非IM的)
- ❌ SecretKey不正确
- ❌ IM服务未开通或已过期
- ❌ 配置文件格式问题
排查步骤
步骤1: 验证配置
运行测试脚本:
cd server
php test_usersig.php
该脚本会:
- ✅ 显示当前SDKAppID和SecretKey
- ✅ 测试UserSig生成
- ✅ 测试UserSig验证
- ✅ 测试IM账号导入
- ✅ 提供详细的错误信息和排查建议
步骤2: 检查腾讯云控制台
- 登录腾讯云控制台
- 进入:即时通信IM > 应用列表
- 确认SDKAppID是否为:
1600127710 - 进入应用详情 > 密钥管理
- 确认SecretKey是否正确
- 检查应用状态是否为"正常"
- 检查是否欠费
步骤3: 使用官方工具测试
- 访问:https://console.cloud.tencent.com/im/tool-usersig
- 输入SDKAppID:
1600127710 - 输入SecretKey:(从控制台复制)
- 输入UserID:
test_user - 点击"生成UserSig"
- 如果生成成功,说明配置正确
- 如果生成失败,说明SDKAppID或SecretKey有误
步骤4: 更新配置
如果发现配置有误,更新 server/.env 文件:
[TRTC]
SDK_APP_ID = "正确的SDKAppID"
SECRET_KEY = "正确的SecretKey"
ENABLE = "true"
保存后重启服务。
技术细节
代码修改
1. AdminLogic.php - 添加导入
// 在 add() 方法中添加
self::importDoctorAccountToIm($admin['id'], $params['name']);
// 在 edit() 方法中添加
self::importDoctorAccountToIm($params['id'], $params['name']);
// 新增方法
private static function importDoctorAccountToIm($adminId, $name)
{
try {
$userId = 'doctor_' . $adminId;
Log::info('开始导入医生IM账号 - admin_id: ' . $adminId . ', user_id: ' . $userId . ', name: ' . $name);
$imService = new TencentImService();
$result = $imService->importAccount($userId, $name);
if ($result) {
Log::info('医生IM账号导入成功 - admin_id: ' . $adminId . ', user_id: ' . $userId);
} else {
Log::warning('医生IM账号导入失败 - admin_id: ' . $adminId . ', user_id: ' . $userId);
}
} catch (\Exception $e) {
Log::error('导入医生IM账号异常 - admin_id: ' . $adminId . ', error: ' . $e->getMessage());
}
}
2. 添加命名空间
use app\common\service\TencentImService;
use think\facade\Log;
依赖服务
TencentImService.php- IM账号导入服务TLSSigAPIv2.php- UserSig生成算法(腾讯云官方)
注意事项
-
不影响现有功能
- 导入失败不会阻止管理员创建
- 只会记录日志,不会抛出异常
-
重复导入
- 重复导入同一账号不会报错
- IM会自动更新昵称信息
-
网络要求
- 服务器需要能访问
console.tim.qq.com - 需要开放HTTPS (443)端口
- 服务器需要能访问
-
性能影响
- 导入操作是同步的
- 通常耗时 < 1秒
- 如果网络慢可能影响保存速度
相关文档
- IM_ACCOUNT_IMPORT.md - IM账号导入完整文档
- AUTO_CREATE_PATIENT_ACCOUNT.md - 患者账号自动创建
- 腾讯云IM REST API
更新日志
2026-03-02
- ✅ 实现医生IM账号自动导入功能
- ✅ 在AdminLogic的add()和edit()方法中添加导入逻辑
- ✅ 创建测试脚本 test_usersig.php
- ⏳ 待解决:ErrorCode 70003 UserSig非法问题
下一步:运行 php server/test_usersig.php 测试配置是否正确