package com.zhgd.xmgl.util; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.joda.time.DateTime; import java.util.*; /** * @program: wisdomSite * @description: 昌通码 * @author: Mr.Peng * @create: 2021-09-09 18:12 **/ @Slf4j public class ElecardUtil { public static String createHMACSHA256Sign(SortedMap parameters, String appSecret) { StringBuffer sb = new StringBuffer(); Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序) Iterator it = es.iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String k = (String) entry.getKey(); Object v = entry.getValue(); if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) { sb.append(k + "=" + v + "&"); } } sb.append("key=" + appSecret); log.info(sb.toString()); String sign = EncriptionHelper.sha256_HMAC(sb.toString(), appSecret).toUpperCase(); return sign; } public static String getToken(String url, String appId, String appSecert, String publicKey, String privateKey) { String token = null; try { JSONObject obj = new JSONObject(); SortedMap body = new TreeMap(); body.put("msgType", "GET_TOKEN"); Map param = new HashMap<>(); param.put("appSecret", appSecert); byte[] bytes = RsaTool.encrypt(JSON.toJSONString(param).getBytes(), publicKey); String msgBody = Base64.encodeBase64(bytes); body.put("msgBody", msgBody); String sign = createHMACSHA256Sign(body, appSecert); JSONObject head = new JSONObject(); String timeStamp = DateTime.now().toString("yyyyMMddHHmmss"); head.put("appId", appId); head.put("timeStamp", timeStamp); head.put("sequenceId", System.currentTimeMillis() + ""); head.put("signture", sign); obj.put("head", head); obj.put("body", body); String result = HttpUtil.post(url + "/elecard-open-web/api/v1", obj.toJSONString()); if (result != null && result.length() > 0) { JSONObject jsonObject = JSONObject.parseObject(result); JSONObject bodyObj = jsonObject.getJSONObject("body"); if ("0".equals(bodyObj.getString("resultCode"))) { String base64 = bodyObj.getString("msgBody"); byte[] resultBytes = RsaTool.decrypt(Base64.decodeBase64(base64.toCharArray()), privateKey); String resultObj = new String(resultBytes, "utf-8"); log.info(resultObj); token = JSONObject.parseObject(resultObj).getString("accessToken"); } } } catch (Exception e) { e.printStackTrace(); } return token; } public static String getCardInfo(String url, String appId, String appSecert, String publicKey, String privateKey, String token, String cardId) { String enterStatus = null; try { JSONObject obj = new JSONObject(); SortedMap body = new TreeMap(); body.put("msgType", "GET_CARDIDINFO"); Map param = new HashMap<>(); param.put("accessToken", token); param.put("cardId", cardId); byte[] bytes = RsaTool.encrypt(JSON.toJSONString(param).getBytes(), publicKey); String msgBody = Base64.encodeBase64(bytes); body.put("msgBody", msgBody); String sign = createHMACSHA256Sign(body, appSecert); JSONObject head = new JSONObject(); String timeStamp = DateTime.now().toString("yyyyMMddHHmmss"); head.put("appId", appId); head.put("timeStamp", timeStamp); head.put("sequenceId", System.currentTimeMillis() + ""); head.put("signture", sign); obj.put("head", head); obj.put("body", body); String result = HttpUtil.post(url + "/elecard-open-web/api/v1", obj.toJSONString()); log.info(result); if (result != null && result.length() > 0) { JSONObject jsonObject = JSONObject.parseObject(result); JSONObject bodyObj = jsonObject.getJSONObject("body"); if ("0".equals(bodyObj.getString("resultCode"))) { String base64 = bodyObj.getString("msgBody"); byte[] resultBytes = RsaTool.decrypt(Base64.decodeBase64(base64.toCharArray()), privateKey); String resultObj = new String(resultBytes, "utf-8"); log.info(resultObj); //0 绿色 //1 橙色 //2 红色 enterStatus = JSONObject.parseObject(resultObj).getString("enterStatus"); } } } catch (Exception e) { e.printStackTrace(); } return enterStatus; } public static void main(String[] args) { String appId = "NV3pyiK6VzxRzL1j"; String appSecert = "i3gpNM55O3Bf6mz"; String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCammp3Fh8XZ50OA5Mk4q0WhvpRsjM5pZ47dsHx7Hiz2CiR1H4UurVt0K4AlnZk88PHe0lUxvno43UWHnh2SNcdQdoVg/sM9GLsHmOJ15dtrZQPaTEbwfUNgzkRFq883jzj0zRqrF/9wLMpxnJgVoEYvMWswYIs64DEn6BgQOipwIDAQAB"; String RSAPrivate = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAITi2c5rJnKgYawcNzlQyZxd2qjLUJszlDu+2vHRvCR/14eLdHleyDLJwPcatQhe8PjmSL+fzEKzdnOJ65EbuZkp2Gncm00J5xkiV5OQ6Yg+zZkFLCE3UOeIuD/gvQVEqzFOdTvelix1mqW+SchR4XvxKkecnZtrvAw5dZoOp/oXAgMBAAECgYEAgAaemUSaUi06bLryaYHv+3pgw+a9zgkvczA5eGj8vp18ZNZybMxoTKYcBvXwHBR8TRBwXk3yWQDVyhLCpZb0g7HVVlyzk1vtt5dqPK8zvvgtYYrqMI5FcnkinbJ7SObgtxQi7h75RvJUxXf3TjxgzHc3+bjMeY2uaQdmsenx3IECQQDrSXRNGo+sMhdIEPe56kEfRDGL6u3zygY5f2yW21nXPSV/ct4G/WNl97Hi328RYqH/tWHOmOlotVxCYLFljxxHAkEAkJWj5SAtjCadozE7rYrbUquiHdGwG4Z85M/NgrSFfCYxWYS3lZ/uAdHrpdgvCbcboC/SWzgMSc0imjPlXZ6rsQJBAKj9ziGfBTg5lg012qfWv8VUNn33U8c5ADWF9xl3HNUCXw9mEmBU2HKhcEuyDVUgUZiWz1QS8fo54LTwPBnkqvsCQGv65fFr67hc6qQDU++S4aPHPQcKIH0eHs6AB5rTGVIT8A1MGhOr4oQHc/djEhYuY3pp3K91l2/SvUHu+iDGLLECQQCYkiRX4siTSR9t0qVZ1dEAKuG30memOFA0+Rt305n9o7fvonw89xrQrnvixn4/KtKEZTsgYYW6JfZ7Z4ANoI+7"; //String token="202cbbca4d2674f040c1d4e7a24865adf89b439c9ec29196f48acd4099dc3acafa9eb97fee40fd74700d8d9d56047f87"; String token = getToken("https://elemanager.hcctm.com/", appId, appSecert, publicKey, RSAPrivate); log.info(getCardInfo("https://elemanager.hcctm.com/", appId, appSecert, publicKey, RSAPrivate, token, "37242919711222591X")); } }