API签名工具 - Kotlin实现
项目结构
根据实际项目文件结构:
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缓存目录
使用方法
构建项目
# 初始化Gradle包装器(如果尚未初始化)
gradle wrapper
# 构建项目
./gradlew build
# 构建可执行JAR文件
./gradlew shadowJar
这将在build/libs/目录下生成一个包含所有依赖的可执行JAR文件。
运行命令行工具
# 直接运行(不需要先构建)
./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 |
显示帮助信息 |
常用命令示例
基本用法
java -jar build/libs/apisign-1.0.0.jar
自定义参数
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"
指定签名算法
java -jar build/libs/apisign-1.0.0.jar -a SHA256
帮助信息
java -jar build/libs/apisign-1.0.0.jar --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
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数据。
代码集成
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: 访问密钥IDSECRET_KEY: 密钥CHANNEL_ID: 渠道IDSIGN_ALGORITHM: 签名算法API_BASE_URL: API基础URL