Merge remote-tracking branch 'origin/master'
# Conflicts: # tcctyn-common/tcctyn-common-core/pom.xml # tcctyn-modules/tcctyn-iot/pom.xml # tcctyn-modules/tcctyn-iot/src/main/java/com/tcctyn/iot/TcctynIotApplication.java # tcctyn-modules/tcctyn-iot/src/main/resources/application.yml
This commit is contained in:
commit
61cf3929ad
|
@ -0,0 +1,91 @@
|
|||
package com.tcctyn.iot.hk;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
|
||||
import com.hikvision.artemis.sdk.config.ArtemisConfig;
|
||||
|
||||
import javax.crypto.Mac;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Instant;
|
||||
import java.util.Base64;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author Jason
|
||||
* @date 2025年05月22日 15:13:09
|
||||
*/
|
||||
public class TestApi {
|
||||
|
||||
private static final String ARTEMIS_PATH = "/artemis";
|
||||
|
||||
/**
|
||||
* 调用POST请求类型接口,这里以获取组织列表为例
|
||||
* 接口实际url:https://ip:port/artemis/api/resource/v1/org/orgList
|
||||
* @return
|
||||
*/
|
||||
public static String callPostApiGetOrgList() throws Exception {
|
||||
/**
|
||||
* https://ip:port/artemis/api/resource/v1/org/orgList
|
||||
* 通过查阅AI Cloud开放平台文档或网关门户的文档可以看到获取组织列表的接口定义,该接口为POST请求的Rest接口, 入参为JSON字符串,接口协议为https。
|
||||
* ArtemisHttpUtil工具类提供了doPostStringArtemis调用POST请求的方法,入参可传JSON字符串, 请阅读开发指南了解方法入参,没有的参数可传null
|
||||
*/
|
||||
ArtemisConfig config = new ArtemisConfig();
|
||||
config.setHost("116.53.205.228:14443"); // 代理API网关nginx服务器ip端口
|
||||
config.setAppKey("21887937"); // 秘钥appkey
|
||||
config.setAppSecret("hwOzOEqxuPDz5frAnEXb");// 秘钥appSecret
|
||||
|
||||
final String getCamsApi = ARTEMIS_PATH + "/api/resource/v1/org/orgList";
|
||||
Map<String, String> paramMap = new HashMap<String, String>();// post请求Form表单参数
|
||||
paramMap.put("pageNo", "1");
|
||||
paramMap.put("pageSize", "2");
|
||||
String body = JSON.toJSON(paramMap).toString();
|
||||
Map<String, String> path = new HashMap<String, String>(2) {
|
||||
{
|
||||
put("https://", getCamsApi);
|
||||
}
|
||||
};
|
||||
Map<String, String> headers = new HashMap<>();
|
||||
headers.put("Content-Type", "application/json");
|
||||
return ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, "application/json",headers);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static String calculateSignature(String appKey,String appSecret, String method, String path,
|
||||
String query, String body, String timestamp) {
|
||||
try {
|
||||
// 1. 构建待签名字符串
|
||||
String content = method + "\n" +
|
||||
"application/json\n" + // Accept
|
||||
"application/json\n" + // Content-Type
|
||||
"\n" + // Date (可为空)
|
||||
"x-ca-key:" + appKey + "\n" +
|
||||
"x-ca-nonce:" + UUID.randomUUID().toString() + "\n" +
|
||||
"x-ca-timestamp:" + timestamp + "\n" +
|
||||
path;
|
||||
|
||||
if (query != null && !query.isEmpty()) {
|
||||
content += "?" + query;
|
||||
}
|
||||
|
||||
content += "\n" + body;
|
||||
|
||||
// 2. 计算HMAC-SHA256签名
|
||||
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
|
||||
SecretKeySpec secret_key = new SecretKeySpec(appSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
|
||||
sha256_HMAC.init(secret_key);
|
||||
byte[] hash = sha256_HMAC.doFinal(content.getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
return Base64.getEncoder().encodeToString(hash);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("计算签名失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
callPostApiGetOrgList();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue