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

5.9 KiB
Raw Blame History

医生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() - 新增的私有方法

账号格式

  • 医生账号IDdoctor_{admin_id}
  • 例如:管理员ID为1,则IM账号为 doctor_1
  • 昵称:使用管理员的名称

使用流程

新增管理员

  1. 进入:权限管理 > 管理员
  2. 点击"新增"按钮
  3. 填写管理员信息(账号、名称、角色等)
  4. 点击"确定"保存
  5. 系统自动导入医生IM账号到腾讯云

编辑管理员

  1. 进入:权限管理 > 管理员
  2. 点击某个管理员的"编辑"按钮
  3. 修改管理员信息
  4. 点击"确定"保存
  5. 系统自动更新医生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. 查看腾讯云控制台

  1. 登录腾讯云控制台
  2. 进入:即时通信IM > 应用列表
  3. 选择你的应用(SDKAppID: 1600127710
  4. 进入:账号管理
  5. 搜索:doctor_1(或其他管理员ID
  6. 应该能看到该账号

3. 测试视频通话

  1. 医生端:使用 doctor_1 账号登录TUICallKit
  2. 患者端:使用 patient_X 账号登录
  3. 发起通话测试
  4. 应该能正常通话

当前问题

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

可能原因

  1. SDKAppID不正确(使用了TRTC的而非IM的)
  2. SecretKey不正确
  3. IM服务未开通或已过期
  4. 配置文件格式问题

排查步骤

步骤1: 验证配置

运行测试脚本:

cd server
php test_usersig.php

该脚本会:

  • 显示当前SDKAppID和SecretKey
  • 测试UserSig生成
  • 测试UserSig验证
  • 测试IM账号导入
  • 提供详细的错误信息和排查建议

步骤2: 检查腾讯云控制台

  1. 登录腾讯云控制台
  2. 进入:即时通信IM > 应用列表
  3. 确认SDKAppID是否为:1600127710
  4. 进入应用详情 > 密钥管理
  5. 确认SecretKey是否正确
  6. 检查应用状态是否为"正常"
  7. 检查是否欠费

步骤3: 使用官方工具测试

  1. 访问:https://console.cloud.tencent.com/im/tool-usersig
  2. 输入SDKAppID1600127710
  3. 输入SecretKey:(从控制台复制)
  4. 输入UserIDtest_user
  5. 点击"生成UserSig"
  6. 如果生成成功,说明配置正确
  7. 如果生成失败,说明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生成算法(腾讯云官方)

注意事项

  1. 不影响现有功能

    • 导入失败不会阻止管理员创建
    • 只会记录日志,不会抛出异常
  2. 重复导入

    • 重复导入同一账号不会报错
    • IM会自动更新昵称信息
  3. 网络要求

    • 服务器需要能访问 console.tim.qq.com
    • 需要开放HTTPS (443)端口
  4. 性能影响

    • 导入操作是同步的
    • 通常耗时 < 1秒
    • 如果网络慢可能影响保存速度

相关文档

更新日志

2026-03-02

  • 实现医生IM账号自动导入功能
  • 在AdminLogic的add()和edit()方法中添加导入逻辑
  • 创建测试脚本 test_usersig.php
  • 待解决:ErrorCode 70003 UserSig非法问题

下一步:运行 php server/test_usersig.php 测试配置是否正确