Files
sign-doc/java/README.md

166 lines
3.9 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签名工具 - Java实现
## 项目结构
根据实际项目文件结构:
```plaintext
java/
├── pom.xml # Maven项目配置
├── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── soundforce/
│ │ └── apisign/
│ │ ├── ApiSigner.java # 签名工具实现
│ │ ├── Main.java # 命令行入口
│ │ ├── SignOptions.java # 签名配置
│ │ └── SignatureAlgorithm.java # 签名算法
│ └── test/
│ └── java/ # 测试代码目录
└── target/ # 构建输出目录
```
## 使用方法
### 构建项目
```bash
mvn clean package
```
### 运行命令行工具
```bash
java -jar target/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 target/apisign-1.0.0.jar
```
**自定义参数**
```bash
java -jar target/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 target/apisign-1.0.0.jar -a SHA256
```
**帮助信息**
```bash
java -jar target/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 target/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 target/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数据。
### 代码集成
```java
import com.soundforce.apisign.ApiSigner;
import com.soundforce.apisign.SignOptions;
import com.soundforce.apisign.SignatureAlgorithm;
import java.util.HashMap;
import java.util.Map;
// 创建签名选项
SignOptions options = new SignOptions(SignatureAlgorithm.MD5);
// 创建签名工具
ApiSigner signer = new ApiSigner(options);
// 准备请求参数
Map<String, String> params = new HashMap<>();
params.put("singleId", "381980");
// 执行签名
Map<String, String> signedParams = signer.signRequest(
params,
"YOUR_ACCESS_KEY",
"YOUR_SECRET_KEY",
"3"
);
// 或签名URL
String 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