Files
sign-doc/kotlin
..

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: 访问密钥ID
  • SECRET_KEY: 密钥
  • CHANNEL_ID: 渠道ID
  • SIGN_ALGORITHM: 签名算法
  • API_BASE_URL: API基础URL