76 lines
3.1 KiB
Markdown
76 lines
3.1 KiB
Markdown
# 推荐服务 API Key 修复说明
|
||
|
||
## 问题描述
|
||
|
||
推荐服务(`recommendations_main.py`)仍然在使用真实的 API key,导致可能使用错误的账户(如 account_id=2)进行下单。
|
||
|
||
## 根本原因
|
||
|
||
1. **推荐服务不应该使用任何账户的 API key**:推荐服务只需要获取公开行情数据,不需要认证。
|
||
2. **`config.py` 在导入时会读取 `ATS_ACCOUNT_ID`**:如果推荐服务的 supervisor 配置中设置了 `ATS_ACCOUNT_ID=2`,那么 `config.py` 会读取 account_id=2 的 API key。
|
||
3. **`BinanceClient.__init__` 可能被覆盖**:即使传入空字符串,如果 `config._config_manager` 存在,可能会在某个地方被覆盖。
|
||
|
||
## 修复方案
|
||
|
||
### 1. 修复 `BinanceClient.__init__` 逻辑
|
||
|
||
确保传入空字符串时不会被 config 覆盖:
|
||
|
||
```python
|
||
# 如果传入的是空字符串,保持为空字符串(不覆盖)
|
||
# 这样推荐服务可以使用空字符串来明确表示"只使用公开接口"
|
||
```
|
||
|
||
### 2. 修复 `connect` 方法
|
||
|
||
当 API key 为空时,跳过权限验证:
|
||
|
||
```python
|
||
# 验证API密钥权限(仅当提供了有效的 API key 时)
|
||
if self.api_key and self.api_secret:
|
||
await self._verify_api_permissions()
|
||
else:
|
||
logger.info("✓ 使用公开 API,跳过权限验证(只能获取行情数据)")
|
||
```
|
||
|
||
### 3. 在推荐服务中添加验证
|
||
|
||
在 `recommendations_main.py` 中添加验证逻辑,确保 API key 确实是空的:
|
||
|
||
```python
|
||
# 验证:确保 API key 确实是空的
|
||
if client.api_key:
|
||
logger.error(f"❌ 推荐服务 API Key 非空!当前值: {client.api_key[:4]}...")
|
||
logger.error(" 这可能导致推荐服务使用错误的账户密钥,请检查 BinanceClient.__init__ 逻辑")
|
||
else:
|
||
logger.info("✓ 推荐服务 API Key 确认为空,将只使用公开接口")
|
||
```
|
||
|
||
## 检查清单
|
||
|
||
1. ✅ 确保 `recommendations_main.py` 传入空字符串:`BinanceClient(api_key="", api_secret="")`
|
||
2. ✅ 确保 `BinanceClient.__init__` 不会覆盖空字符串
|
||
3. ✅ 确保 `connect` 方法在 API key 为空时跳过权限验证
|
||
4. ✅ 在推荐服务中添加验证逻辑,确保 API key 确实是空的
|
||
|
||
## 验证方法
|
||
|
||
1. 查看推荐服务的日志,确认显示:
|
||
- `✓ 推荐服务 API Key 确认为空,将只使用公开接口`
|
||
- `✓ 使用公开 API,跳过权限验证(只能获取行情数据)`
|
||
|
||
2. 如果看到以下日志,说明仍有问题:
|
||
- `❌ 推荐服务 API Key 非空!`
|
||
- `初始化币安客户端: gqtx...sYmj, l3IB...I6NA`(显示真实的 API key)
|
||
|
||
## 注意事项
|
||
|
||
1. **推荐服务不应该设置 `ATS_ACCOUNT_ID`**:推荐服务的 supervisor 配置不应该设置 `ATS_ACCOUNT_ID`,或者应该明确设置为空。
|
||
2. **推荐服务不应该下单**:推荐服务只生成推荐,不应该进行任何下单操作。
|
||
3. **如果推荐服务仍然使用真实的 API key**:检查 supervisor 配置,确保推荐服务进程没有设置 `ATS_ACCOUNT_ID`。
|
||
|
||
## 后续优化
|
||
|
||
1. 考虑在 `config.py` 中添加一个标志,区分推荐服务和交易服务。
|
||
2. 考虑在推荐服务启动时,明确清除 `ATS_ACCOUNT_ID` 环境变量。
|