package com.java110.common.charge.factory.kehang; import com.alibaba.fastjson.JSONObject; import com.java110.core.annotation.Java110Synchronized; import com.java110.core.factory.AuthenticationFactory; import com.java110.core.log.LoggerFactory; import com.java110.utils.cache.JWTCache; import com.java110.utils.cache.MappingCache; import com.java110.utils.factory.ApplicationContextFactory; import com.java110.utils.util.DateUtil; import com.java110.utils.util.PayUtil; import com.java110.utils.util.StringUtil; import org.slf4j.Logger; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.util.*; public class KeHangChargeUtils { private static Logger logger = LoggerFactory.getLogger(KeHangChargeUtils.class); public static final String KE_HANG_DOMAIN = "KE_HANG_CHARGE"; public static final String KE_HANG_APP_ID = "APP_ID"; public static final String KE_HANG_APP_SECURE = "APP_SECURE"; public static final String URL = "https://api.poseidong.com/api/gateway"; /** * 请求充电桩 接口 *

* MappingCache.getValue(DING_DING_DOMAIN, DING_DING_APP_ID), * MappingCache.getValue(DING_DING_DOMAIN, DING_DING_APP_SECURE * * @param api * @param body * @param httpMethod * @return * @throws Exception */ public static String execute(String api, String body, HttpMethod httpMethod) throws Exception { RestTemplate outRestTemplate = ApplicationContextFactory.getBean("outRestTemplate", RestTemplate.class); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add("app_id", MappingCache.getValue(KE_HANG_DOMAIN, KE_HANG_APP_ID)); httpHeaders.add("psd_entry", DateUtil.getCurrentDate().getTime() + ""); JSONObject bodyObj = JSONObject.parseObject(body); bodyObj.put("api",api); bodyObj.put("nonce", PayUtil.makeUUID(16)); bodyObj.put("sign",getSign(bodyObj)); HttpEntity httpEntity = new HttpEntity(body, httpHeaders); ResponseEntity response = null; try { response = outRestTemplate.exchange(URL, httpMethod, httpEntity, String.class); } catch (HttpStatusCodeException e) { logger.error("请求异常", e.getResponseBodyAsString()); throw new IllegalArgumentException(e.getResponseBodyAsString()); } return response.getBody(); } private static String getSign(JSONObject bodyObj) throws Exception { SortedMap map = new TreeMap(); for (String key: bodyObj.keySet()) { String vlaue = bodyObj.getString("key"); map.put(key, vlaue); } StringBuffer sb = new StringBuffer(); Set es = map.entrySet(); Iterator it = es.iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String k = (String) entry.getKey(); if (entry.getValue() != null || !"".equals(entry.getValue())) { String v = String.valueOf(entry.getValue()); if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) { sb.append(k + "=" + v + "&"); } } } sb.append("key=" + MappingCache.getValue(KE_HANG_DOMAIN, KE_HANG_APP_SECURE)); String sign = AuthenticationFactory.md5(sb.toString()).toUpperCase(); return sign; } }