新增功能
This commit is contained in:
@@ -0,0 +1,227 @@
|
||||
# 医生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`
|
||||
- 昵称:使用管理员的名称
|
||||
|
||||
## 使用流程
|
||||
|
||||
### 新增管理员
|
||||
1. 进入:权限管理 > 管理员
|
||||
2. 点击"新增"按钮
|
||||
3. 填写管理员信息(账号、名称、角色等)
|
||||
4. 点击"确定"保存
|
||||
5. ✅ 系统自动导入医生IM账号到腾讯云
|
||||
|
||||
### 编辑管理员
|
||||
1. 进入:权限管理 > 管理员
|
||||
2. 点击某个管理员的"编辑"按钮
|
||||
3. 修改管理员信息
|
||||
4. 点击"确定"保存
|
||||
5. ✅ 系统自动更新医生IM账号信息
|
||||
|
||||
## 验证方法
|
||||
|
||||
### 1. 查看日志
|
||||
|
||||
```bash
|
||||
# 查看最新日志
|
||||
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: 验证配置
|
||||
|
||||
运行测试脚本:
|
||||
```bash
|
||||
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. 输入SDKAppID:`1600127710`
|
||||
3. 输入SecretKey:(从控制台复制)
|
||||
4. 输入UserID:`test_user`
|
||||
5. 点击"生成UserSig"
|
||||
6. 如果生成成功,说明配置正确
|
||||
7. 如果生成失败,说明SDKAppID或SecretKey有误
|
||||
|
||||
### 步骤4: 更新配置
|
||||
|
||||
如果发现配置有误,更新 `server/.env` 文件:
|
||||
|
||||
```ini
|
||||
[TRTC]
|
||||
SDK_APP_ID = "正确的SDKAppID"
|
||||
SECRET_KEY = "正确的SecretKey"
|
||||
ENABLE = "true"
|
||||
```
|
||||
|
||||
保存后重启服务。
|
||||
|
||||
## 技术细节
|
||||
|
||||
### 代码修改
|
||||
|
||||
#### 1. AdminLogic.php - 添加导入
|
||||
|
||||
```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. 添加命名空间
|
||||
|
||||
```php
|
||||
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秒
|
||||
- 如果网络慢可能影响保存速度
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [IM_ACCOUNT_IMPORT.md](./IM_ACCOUNT_IMPORT.md) - IM账号导入完整文档
|
||||
- [AUTO_CREATE_PATIENT_ACCOUNT.md](./AUTO_CREATE_PATIENT_ACCOUNT.md) - 患者账号自动创建
|
||||
- [腾讯云IM REST API](https://cloud.tencent.com/document/product/269/1519)
|
||||
|
||||
## 更新日志
|
||||
|
||||
### 2026-03-02
|
||||
- ✅ 实现医生IM账号自动导入功能
|
||||
- ✅ 在AdminLogic的add()和edit()方法中添加导入逻辑
|
||||
- ✅ 创建测试脚本 test_usersig.php
|
||||
- ⏳ 待解决:ErrorCode 70003 UserSig非法问题
|
||||
|
||||
---
|
||||
|
||||
**下一步**:运行 `php server/test_usersig.php` 测试配置是否正确
|
||||
Reference in New Issue
Block a user