java110
2023-06-13 ae42d2da37fe9d161e7058b51367b95f24c3d97a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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";
 
 
 
    /**
     * 请求充电桩 接口
     * <p>
     * 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<String> 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;
    }
}