ChargingUtil.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package com.zsElectric.boot.common.util.electric;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.google.gson.Gson;
  4. import com.google.gson.JsonObject;
  5. import com.zsElectric.boot.common.constant.ConnectivityConstants;
  6. import com.zsElectric.boot.common.util.AESCryptoUtil;
  7. import com.zsElectric.boot.common.util.HmacMD5Util;
  8. import com.zsElectric.boot.common.util.OkHttpUtil;
  9. import com.zsElectric.boot.common.util.SequenceGenUtil;
  10. import jakarta.annotation.Resource;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.springframework.stereotype.Component;
  13. import java.util.HashMap;
  14. import java.util.Map;
  15. import java.util.Objects;
  16. @Slf4j
  17. @Component
  18. public class ChargingUtil {
  19. @Resource
  20. private TokenManager tokenManager;
  21. @Resource
  22. private OkHttpUtil okHttpUtil;
  23. /**
  24. * 请求封装
  25. * @param url
  26. * @param queryParms
  27. * @param tokenRequired
  28. * @return
  29. */
  30. public JsonObject chargingRequest(String url, Map<String,Object> queryParms,boolean tokenRequired) {
  31. Map<String, String> headers = new HashMap<>();
  32. if(tokenRequired){
  33. headers.put("Authorization", "Bearer " + tokenManager.getValidAccessToken());
  34. }
  35. try {
  36. RequestParmsEntity requestParms = new RequestParmsEntity();
  37. SequenceGenUtil.SequenceResult result = SequenceGenUtil.generate();
  38. requestParms
  39. .setOperatorID(ConnectivityConstants.OPERATOR_ID)
  40. .setData(AESCryptoUtil.decrypt(queryParms.toString(),ConnectivityConstants.DATA_SECRET,ConnectivityConstants.DATA_SECRET_IV))
  41. .setTimeStamp(result.getTimestamp())
  42. .setSeq(result.getSequence())
  43. .setSig(HmacMD5Util.genSign(requestParms.getOperatorID(),requestParms.getData(),requestParms.getTimeStamp(),requestParms.getSeq(),ConnectivityConstants.SIG_SECRET));
  44. JsonObject response = okHttpUtil.doPostForm(url, BeanUtil.beanToMap(requestParms), headers);
  45. if (Objects.isNull(response)) {
  46. log.error("调用第三方接口获取Token失败");
  47. return null;
  48. }
  49. return response;
  50. }catch (Exception e){
  51. throw new RuntimeException("调用第三方接口发生异常", e);
  52. }
  53. }
  54. /**
  55. * 响应解密
  56. * @param response
  57. * @return
  58. */
  59. public JsonObject responseDecode(JsonObject response){
  60. try {
  61. if (Objects.isNull(response)) {
  62. log.error("第三方接口响应数据为空");
  63. return null;
  64. }
  65. Gson gson = new Gson();
  66. ResponseParmsEntity responseParms = gson.fromJson(response, ResponseParmsEntity.class);
  67. String data = responseParms.getRet() + responseParms.getMsg() + responseParms.getData();
  68. boolean verify = HmacMD5Util.verify(data, ConnectivityConstants.PLATFORM_DATA_SECRET, responseParms.getSig());
  69. if (!verify) {
  70. log.error("第三方接口响应数据签名验证失败");
  71. return null;
  72. }
  73. if (responseParms.getRet() != 0){
  74. switch (responseParms.getRet()) {
  75. case -1:
  76. log.error("系统繁忙,此时请求方稍后重试");
  77. break;
  78. case 4001:
  79. log.error("签名错误");
  80. break;
  81. case 4002:
  82. log.error("Token错误");
  83. break;
  84. case 4003:
  85. log.error("参数不合法,缺少必需的示例:OperatorID、Sig、TimeStamp、Data、Seq五个参数");
  86. break;
  87. case 4004:
  88. log.error("请求的业务参数不合法,各接口定义自己的必须参数");
  89. break;
  90. case 500:
  91. log.error("系统错误");
  92. break;
  93. }
  94. }
  95. String decodeData = AESCryptoUtil.decrypt(responseParms.getData(), ConnectivityConstants.PLATFORM_DATA_SECRET,
  96. ConnectivityConstants.PLATFORM_DATA_SECRET_IV);
  97. return gson.fromJson(decodeData, JsonObject.class);
  98. }catch (Exception e){
  99. throw new RuntimeException("第三方接口响应发生异常", e);
  100. }
  101. }
  102. }