Browse Source

测试类

2025年1月17日10:37:07
qingyuan_dev_new
lishuai 1 year ago
parent
commit
3ec8adf602
  1. 174
      application/src/main/java/com/thing/ShineMonitorOpenApi.java

174
application/src/main/java/com/thing/ShineMonitorOpenApi.java

@ -0,0 +1,174 @@
package com.thing;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.security.Key;
import java.security.MessageDigest;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/**
* @author: yu
* @date: 2024/12/21 12:05
* @description:
*/
public class ShineMonitorOpenApi {
private static String OPEN_API_URI = "http://api.shinemonitor.com/public/";
private static final Map<String,String> CSLTokenCache = new HashMap<>();
/** 认证接口. */
//获取token
public static String auth() throws UnsupportedEncodingException {
String usr = "2022青原区村级电站"; /* 平台分配的账号, 密码, 厂家标识. */
String pwd = "12345678";
String companyKey = "wFeaA_Wd2R966GEQ";
String source = "0";
String _app_id_ = "com.demo.test";
String _app_version_ = "3.6.2.1";
String _app_client_ = "android";
String salt = System.currentTimeMillis() + ""; /* 盐值. */
String sha1Pwd = sha1ToLowerCase(pwd.getBytes()); /* SHA-1(pwd). */
String action = "&action=auth&usr=" + URLEncoder.encode(usr, StandardCharsets.UTF_8.toString()) /* 注意: 中文需URLEncoder.encode. */ + "&company-key=" + companyKey
+ "&source=" + source + "&_app_id_=" + _app_id_ + "&_app_version_=" + _app_version_ + "&_app_client_=" + _app_client_;
String sign = sha1ToLowerCase((salt + sha1Pwd + action).getBytes()); /* SHA-1(slat + SHA-1(pwd) + action). */
String request = OPEN_API_URI + "?sign=" + sign + "&salt=" + salt + action;
System.out.println(request);
return request;
}
/** 注册电站业主账号接口. */
private static void reg()
{
String usr = "plant-user-01";
String pwd = "plant-user-01";
String mobile = "15889700000";
String email = "eybond@eybond.com";
String pn = "0123456789ABCD";
String sn = pn;
String companyKey = "0123456789ABCDEF";
String source = "0";
String _app_id_ = "com.demo.test";
String _app_version_ = "3.6.2.1";
String _app_client_ = "android";
String salt = System.currentTimeMillis() + ""; /* 盐值. */
String pwdSha1 = sha1ToLowerCase(pwd.getBytes()); /* SHA-1(PWD). */
String pnSha1 = sha1ToLowerCase(pn.getBytes()); /* SHA-1(PN). */
byte[] rc4 = rc4enc(pnSha1.getBytes(), pwdSha1.getBytes(), 0, pwdSha1.getBytes().length); /* RC4(SHA-1(PN), SHA-1(PWD)). */
String action = "&action=reg&usr=" + usr /* 注意: 中文需URLEncoder.encode. */ + "&pwd=" + byte2HexStr(rc4, 0, rc4.length).toLowerCase();
action += "&mobile=" + mobile + "&email=" + email + "&sn=" + sn + "&company-key=" + companyKey + "&source="
+ source + "&_app_id_=" + _app_id_ + "&_app_version_=" + _app_version_ + "&_app_client_=" + _app_client_;
String sign = sha1ToLowerCase((salt + pwdSha1 + action).getBytes());
String request = OPEN_API_URI + "?sign=" + sign + "&salt=" + salt + action;
System.out.println(request);
}
/** 认证通过后的业务API接口. */
public static String authPassed(String act)
{
//String secret = CSLTokenCache.tokenMap.get("plantSecret"); /* 认证通过后的secret与token. */
// String token = CSLTokenCache.tokenMap.get("plantToken");
//
String secret = "8c8858760519b53426e7bd09d35412004ec46646"; /* 认证通过后的secret与token. */
String token = "9bb029922c7bd51d07bf93535627b004ec6a29e3608bfce72aaf816e84183640";
String source = "0";
String _app_id_ = "com.demo.test";
String _app_version_ = "3.6.2.1";
String _app_client_ = "android";
String salt = System.currentTimeMillis() + ""; /* 盐值. */
String action = "&action="+ act + "&source=" + source + "&_app_id_="
+ _app_id_ + "&_app_version_=" + _app_version_ + "&_app_client_=" + _app_client_;
String sign = sha1ToLowerCase((salt + secret + token + action).getBytes()); /* SHA-1(slat + secret + token + action). */
String request = OPEN_API_URI + "?sign=" + sign + "&salt=" + salt + "&token=" + token + action;
System.out.println(request);
return request;
}
/** 将字节流转换成十六进制字符串(紧凑格式, 无空格). */
private static String byte2HexStr(byte by[], int ofst, int len)
{
if (len < 1)
return "";
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(bos);
for (int i = ofst; i < ofst + len; i++)
ps.printf("%02X", by[i]);
return bos.toString();
}
/** SHA-1摘要算法. */
private static String sha1ToLowerCase(byte[] by)
{
try
{
byte dat[] = MessageDigest.getInstance("SHA-1").digest(by);
return byte2HexStr(dat, 0, dat.length).toLowerCase();
} catch (Exception e)
{
e.printStackTrace();
return null;
}
}
/** RC4加密. */
public static byte[] rc4enc(byte key[], byte[] org, int ofst, int len)
{
try
{
Key k = new SecretKeySpec(key, "RC4");
Cipher cip = Cipher.getInstance("RC4");
cip.init(Cipher.ENCRYPT_MODE, k);
return cip.doFinal(org, ofst, len);
} catch (Exception e)
{
e.printStackTrace();
return null;
}
}
public static void main(String[] args) throws UnsupportedEncodingException {
/* String auth = auth();
String authUrl = HttpUtil.get(auth);
JSONObject jsonObject = JSONObject.parseObject(authUrl);
JSONObject jsonObject1 = jsonObject.getJSONObject("dat");
String secret = jsonObject1.getString("secret");
String token = jsonObject1.getString("token");
CSLTokenCache.put("plantSecret", secret);
CSLTokenCache.put("plantToken", token);*/
//电站
String url1 = authPassed("queryPlants&orderBy=ascPlantName&page=0&pagesize=10");
// 查询数采器
String url2 = authPassed("queryCollectors&plantid=416002&page=0&pagesize=10");
//数据采集器下的设备
// String url3 = authPassed("queryCollectorDevices&pn=L0022362555526");
//查询逆变器
// String url4 = authPassed("queryDeviceRateActiveOutputPower&pn=L0022362555526&devcode=734&devaddr=2&sn=6T2289044210");
//查询设备
// String url = authPassed("queryDevices&plantid=425771&page=1&pagesize=10");
String url = authPassed("queryDevices&page=0&plantid=416002&pn=L0022362347633&pagesize=10&devtype=0x0400");
String url4 = authPassed("queryDeviceLastRawData&pn=L0022362347633&devcode=734&devaddr=1&sn=ES2280121217");
String url54 = authPassed("queryDeviceEnergyTotal&pn=L0022362347633&devcode=734&devaddr=1&sn=ES2280121217");
String result = HttpUtil.get(url);
System.out.println(result);
}
}
Loading…
Cancel
Save