178 lines
4.3 KiB
Markdown
178 lines
4.3 KiB
Markdown
# API签名工具 - Kotlin实现
|
||
|
||
## 项目结构
|
||
|
||
根据实际项目文件结构:
|
||
|
||
```plaintext
|
||
kotlin/
|
||
├── build.gradle.kts # Gradle构建文件
|
||
├── gradle/ # Gradle包装器目录
|
||
├── gradlew # Gradle包装器脚本(Unix)
|
||
├── gradlew.bat # Gradle包装器脚本(Windows)
|
||
├── gradle.properties # Gradle属性配置
|
||
├── settings.gradle.kts # Gradle设置
|
||
├── src/
|
||
│ └── main/
|
||
│ └── kotlin/
|
||
│ └── com/
|
||
│ └── soundforce/
|
||
│ └── apisign/
|
||
│ ├── ApiSigner.kt # 签名工具实现
|
||
│ ├── Main.kt # 命令行接口
|
||
│ ├── SignOptions.kt # 签名配置
|
||
│ └── SignatureAlgorithm.kt # 签名算法
|
||
├── build/ # 构建输出目录
|
||
└── .gradle/ # Gradle缓存目录
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 构建项目
|
||
|
||
```bash
|
||
# 初始化Gradle包装器(如果尚未初始化)
|
||
gradle wrapper
|
||
|
||
# 构建项目
|
||
./gradlew build
|
||
|
||
# 构建可执行JAR文件
|
||
./gradlew shadowJar
|
||
```
|
||
|
||
这将在`build/libs/`目录下生成一个包含所有依赖的可执行JAR文件。
|
||
|
||
### 运行命令行工具
|
||
|
||
```bash
|
||
# 直接运行(不需要先构建)
|
||
./gradlew run --args="[选项]"
|
||
|
||
# 或使用构建后的JAR文件
|
||
java -jar build/libs/apisign-1.0.0.jar [选项]
|
||
```
|
||
|
||
### 命令行选项
|
||
|
||
| 选项 | 描述 |
|
||
|------|------|
|
||
| `-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` | 显示帮助信息 |
|
||
|
||
### 常用命令示例
|
||
|
||
**基本用法**
|
||
|
||
```bash
|
||
java -jar build/libs/apisign-1.0.0.jar
|
||
```
|
||
|
||
**自定义参数**
|
||
|
||
```bash
|
||
java -jar build/libs/apisign-1.0.0.jar \
|
||
-u "https://api.example.com/user/info" \
|
||
-p "userId=12345" -p "action=getInfo" \
|
||
-k "YOUR_ACCESS_KEY" \
|
||
-s "YOUR_SECRET_KEY" \
|
||
-c "3"
|
||
```
|
||
|
||
**指定签名算法**
|
||
|
||
```bash
|
||
java -jar build/libs/apisign-1.0.0.jar -a SHA256
|
||
```
|
||
|
||
**帮助信息**
|
||
|
||
```bash
|
||
java -jar build/libs/apisign-1.0.0.jar --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
|
||
java -jar build/libs/apisign-1.0.0.jar \
|
||
-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=$(java -jar build/libs/apisign-1.0.0.jar \
|
||
-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"
|
||
```
|
||
|
||
请注意:
|
||
|
||
- 替换`YOUR_ACCESS_KEY`为实际的访问密钥ID
|
||
- 替换`YOUR_SECRET_KEY`为实际的密钥
|
||
- 示例使用的渠道ID为`3`,请根据实际情况调整
|
||
|
||
使用有效的密钥和签名后,API接口将返回成功响应(状态码200)并提供媒体URL数据。
|
||
|
||
### 代码集成
|
||
|
||
```kotlin
|
||
import com.soundforce.apisign.ApiSigner
|
||
import com.soundforce.apisign.SignOptions
|
||
import com.soundforce.apisign.SignatureAlgorithm
|
||
|
||
// 创建签名工具
|
||
val signer = ApiSigner()
|
||
|
||
// 参数
|
||
val params = mapOf(
|
||
"singleId" to "381980"
|
||
)
|
||
|
||
// 执行签名
|
||
val signedParams = signer.signRequest(
|
||
params,
|
||
"YOUR_ACCESS_KEY",
|
||
"YOUR_SECRET_KEY",
|
||
"3"
|
||
)
|
||
|
||
// 或签名URL
|
||
val signedUrl = signer.signUrl(
|
||
"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
|