| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package com.zsElectric.boot.common.util.electric;
- import cn.hutool.core.bean.BeanUtil;
- import com.google.gson.Gson;
- import com.google.gson.JsonObject;
- import com.zsElectric.boot.common.constant.ConnectivityConstants;
- import com.zsElectric.boot.common.util.AESCryptoUtils;
- import com.zsElectric.boot.common.util.HmacMD5Util;
- import com.zsElectric.boot.common.util.OkHttpUtil;
- import com.zsElectric.boot.common.util.SequenceGenUtil;
- import jakarta.annotation.Resource;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Component;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Objects;
- @Slf4j
- @Component
- public class ChargingUtil {
- @Resource
- private ElectricTokenManager tokenManager;
- @Resource
- private OkHttpUtil okHttpUtil;
- /**
- * 请求封装
- * @param url
- * @param queryParms
- * @param tokenRequired
- * @return
- */
- public JsonObject chargingRequest(String url, Map<String,Object> queryParms,boolean tokenRequired){
- Map<String, String> headers = new HashMap<>();
- if(tokenRequired){
- headers.put("Authorization", "Bearer " + tokenManager.getValidAccessToken());
- }
- try {
- RequestParmsEntity requestParms = new RequestParmsEntity();
- SequenceGenUtil.SequenceResult result = SequenceGenUtil.generate();
- requestParms
- .setOperatorID(ConnectivityConstants.OPERATOR_ID)
- .setData(AesCryptoUtil.encrypt(queryParms.toString(),ConnectivityConstants.PLATFORM_DATA_SECRET,
- ConnectivityConstants.PLATFORM_DATA_SECRET_IV))
- .setTimeStamp(result.getTimestamp())
- .setSeq(result.getSequence())
- .setSig(HmacMD5Util.genSign(requestParms.getOperatorID(),requestParms.getData(),requestParms.getTimeStamp(),requestParms.getSeq(),ConnectivityConstants.SIG_SECRET));
- JsonObject response = okHttpUtil.doPostForm(url, BeanUtil.beanToMap(requestParms), headers);
- if (Objects.isNull(response)) {
- log.error("调用第三方接口获取Token失败");
- return null;
- }
- return response;
- }catch (Exception e){
- throw new RuntimeException("调用第三方接口发生异常", e);
- }
- }
- /**
- * 响应解密
- * @param response
- * @return
- */
- public JsonObject responseDecode(JsonObject response){
- try {
- if (Objects.isNull(response)) {
- log.error("第三方接口响应数据为空");
- return null;
- }
- Gson gson = new Gson();
- ResponseParmsEntity responseParms = gson.fromJson(response, ResponseParmsEntity.class);
- String data = responseParms.getRet() + responseParms.getMsg() + responseParms.getData();
- boolean verify = HmacMD5Util.verify(data, ConnectivityConstants.PLATFORM_SIG_SECRET, responseParms.getSig());
- if (!verify) {
- log.error("第三方接口响应数据签名验证失败");
- return null;
- }
- if (responseParms.getRet() != 0){
- switch (responseParms.getRet()) {
- case -1:
- log.error("系统繁忙,此时请求方稍后重试");
- break;
- case 4001:
- log.error("签名错误");
- break;
- case 4002:
- log.error("Token错误");
- break;
- case 4003:
- log.error("参数不合法,缺少必需的示例:OperatorID、Sig、TimeStamp、Data、Seq五个参数");
- break;
- case 4004:
- log.error("请求的业务参数不合法,各接口定义自己的必须参数");
- break;
- case 500:
- log.error("系统错误");
- break;
- }
- }
- String decodeData = AesCryptoUtil.decrypt(responseParms.getData(), ConnectivityConstants.PLATFORM_DATA_SECRET,
- ConnectivityConstants.PLATFORM_DATA_SECRET_IV);
- return gson.fromJson(decodeData, JsonObject.class);
- }catch (Exception e){
- throw new RuntimeException("第三方接口响应发生异常", e);
- }
- }
- }
|