Files
sign-doc/python

API签名工具 - Python实现

项目结构

根据实际项目文件结构:

python/
├── api_signer.py            # 签名工具实现(单文件版)
├── requirements.txt         # 依赖配置

使用方法

安装依赖

pip install -r requirements.txt

运行命令行工具

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格式指定参数

常用命令示例

基本用法

python api_signer.py

自定义参数

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参数

python api_signer.py -j '{"userId": "12345", "action": "getData"}'

指定签名算法

python api_signer.py -a sha256

帮助信息

python api_signer.py --help

API接口测试实例

使用真实API接口进行测试

# 未签名的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数据。

代码集成

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