Files
sign-doc/kotlin/README.md

178 lines
4.3 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签名工具 - 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