Files
sign-doc/python/README.md

168 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# API签名工具 - Python实现
## 项目结构
根据实际项目文件结构:
```plaintext
python/
├── api_signer.py # 签名工具实现(单文件版)
├── requirements.txt # 依赖配置
```
## 使用方法
### 安装依赖
```bash
pip install -r requirements.txt
```
### 运行命令行工具
```bash
python api_signer.py [选项]
```
### 命令行选项
| 选项 | 描述 |
|------|------|
| `-a, --algorithm` | 签名算法: md5, sha1, sha256, hmac-sha256 |
| `-u, --url` | API基础URL |
| `-p, --param` | 请求参数格式为key=value可多次使用 |
| `-k, --key` | 访问密钥ID |
| `-s, --secret` | 密钥 |
| `-c, --channel` | 合作渠道方ID |
| `-h, --help` | 显示帮助信息 |
| `-j, --json` | 以JSON格式指定参数 |
### 常用命令示例
**基本用法**
```bash
python api_signer.py
```
**自定义参数**
```bash
python api_signer.py \
-u "https://api.example.com/user/info" \
-p "userId=12345" -p "action=getInfo" \
-k "YOUR_ACCESS_KEY" \
-s "YOUR_SECRET_KEY" \
-c "3"
```
**使用JSON参数**
```bash
python api_signer.py -j '{"userId": "12345", "action": "getData"}'
```
**指定签名算法**
```bash
python api_signer.py -a sha256
```
**帮助信息**
```bash
python api_signer.py --help
```
### API接口测试实例
使用真实API接口进行测试
```bash
# 未签名的API调用测试 - 返回错误
curl "https://api-v1.sound-force.com:8443/p/album/single/media-url?channelId=3&singleId=381980"
# 返回: {"code":400,"data":null,"msg":"Missing AccessKeyId","success":false}
# 生成访问https://api-v1.sound-force.com:8443/p/album/single/media-url的签名URL
python api_signer.py \
-a md5 \
-u "https://api-v1.sound-force.com:8443/p/album/single/media-url" \
-p "singleId=381980" \
-k "YOUR_ACCESS_KEY" \
-s "YOUR_SECRET_KEY" \
-c "3"
# 使用curl测试API接口
signed_url=$(python api_signer.py \
-a md5 \
-u "https://api-v1.sound-force.com:8443/p/album/single/media-url" \
-p "singleId=381980" \
-k "YOUR_ACCESS_KEY" \
-s "YOUR_SECRET_KEY" \
-c "3" | grep -A 1 "签名后的URL:" | tail -n 1)
curl -v "$signed_url"
# 使用Python requests库测试
python -c "
import requests
import subprocess
url = subprocess.check_output(\"python api_signer.py -a md5 -u 'https://api-v1.sound-force.com:8443/p/album/single/media-url' -p 'singleId=381980' -k 'YOUR_ACCESS_KEY' -s 'YOUR_SECRET_KEY' -c '3' | grep -A 1 '签名后的URL:' | tail -n 1\", shell=True).decode().strip()
response = requests.get(url)
print(f'状态码: {response.status_code}')
print(f'响应内容: {response.text}')
"
```
请注意:
- 替换`YOUR_ACCESS_KEY`为实际的访问密钥ID
- 替换`YOUR_SECRET_KEY`为实际的密钥
- 示例使用的渠道ID为`3`,请根据实际情况调整
使用有效的密钥和签名后API接口将返回成功响应(状态码200)并提供媒体URL数据。
### 代码集成
```python
from api_signer import ApiSigner, SignOptions, SignatureAlgorithm
# 创建签名选项
options = SignOptions(algorithm=SignatureAlgorithm.MD5)
# 创建签名工具
signer = ApiSigner(options)
# 准备请求参数
params = {
"singleId": "381980"
}
# 执行签名
signed_params = signer.sign_request(
params,
"YOUR_ACCESS_KEY",
"YOUR_SECRET_KEY",
"3"
)
# 或签名URL
signed_url = signer.sign_url(
"https://api-v1.sound-force.com:8443/p/album/single/media-url",
params,
"YOUR_ACCESS_KEY",
"YOUR_SECRET_KEY",
"3"
)
```
### 环境变量
该工具支持从`.env`文件加载以下配置:
- `ACCESS_KEY_ID`: 访问密钥ID
- `SECRET_KEY`: 密钥
- `CHANNEL_ID`: 渠道ID
- `SIGN_ALGORITHM`: 签名算法
- `API_BASE_URL`: API基础URL