public class HmacMD5Utils {
private final static String ALGORITHM = "HmacMD5";
public static void main(String[] args) throws Exception {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headersFirst = new HttpHeaders();
headersFirst.add("Content-Type", "application/json");
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("appKey", "jsskwxx");
requestBody.put("appSecret", "9319f2b63f8d4af4bdeb725a4047e3b1");
HttpEntity<Map<String, Object>> entityF = new HttpEntity<>(requestBody, headersFirst);
String url = "https://admin.seerai.cn/api/user/token/login";
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entityF, String.class);
String responseBody = response.getBody();
JSONObject jsonObject = JSONObject.parseObject(responseBody);
Object data = jsonObject.get("data");
JSONObject result = JSONObject.parseObject(data.toString());
String appKey = "jsskwxx";
String token = result.get("token").toString();//通过登录接口返回的token
Map<String, Object> encrypt = encrypt(appKey, token, System.currentTimeMillis());
System.out.println("加密结果为: " + encrypt.get("sign"));
JSONObject paramTxt = JSONObject.parseObject(encrypt.get("paramTxt").toString());
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", MediaType.APPLICATION_JSON_UTF8_VALUE);
headers.add("sign", encrypt.get("sign").toString());
headers.add("serial", "17l021965");
headers.add("appkey", "jsskwxx");
headers.add("timestamp", paramTxt.get("timestamp").toString());
HttpEntity<String> entity = new HttpEntity<>(headers);
String urlT = "https://admin.seerai.cn/api/iot/ble/bp/serial";
ResponseEntity<String> responseT = restTemplate.exchange(urlT, HttpMethod.GET, entity, String.class);
String responseBodyT = responseT.getBody();
System.out.println(responseBodyT);
}
public static Map<String, Object> encrypt(String appKey, String token, Long timestamp) throws Exception {
TreeMap<String, Object> param = new TreeMap<>();
param.put("appKey", appKey);
param.put("timestamp", timestamp);
String paramTxt = JSON.toJSONString(param);
String sign = byteToString(HmacMD5(paramTxt, token));
System.out.println("待加密内容: " + paramTxt);
Map<String, Object> map = new HashMap<>();
map.put("sign", sign);
map.put("paramTxt", paramTxt);
return map;
}
public static byte[] HmacMD5(String source, String key) throws Exception {
return HmacMD5(source.getBytes(StandardCharsets.UTF_8), key);
}
public static byte[] HmacMD5(byte[] binaryData, String key) throws Exception {
Mac mac = Mac.getInstance(ALGORITHM);
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM);
mac.init(secretKey);
return mac.doFinal(binaryData);
}
public static String byteToString(byte[] byteArray) {
StringBuilder md5StrBuff = new StringBuilder();
for (byte aByteArray : byteArray) {
if (Integer.toHexString(0xFF & aByteArray).length() == 1)
md5StrBuff.append("0").append(Integer.toHexString(0xFF & aByteArray));
else md5StrBuff.append(Integer.toHexString(0xFF & aByteArray));
}
return md5StrBuff.toString();
}
}
远程调用第三方接口
于 2024-05-07 16:53:15 首次发布