ChargingUtil.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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.AESCryptoUtils;
  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 ElectricTokenManager 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.encrypt(queryParms.toString(),ConnectivityConstants.PLATFORM_DATA_SECRET,
  41. ConnectivityConstants.PLATFORM_DATA_SECRET_IV))
  42. .setTimeStamp(result.getTimestamp())
  43. .setSeq(result.getSequence())
  44. .setSig(HmacMD5Util.genSign(requestParms.getOperatorID(),requestParms.getData(),requestParms.getTimeStamp(),requestParms.getSeq(),ConnectivityConstants.SIG_SECRET));
  45. JsonObject response = okHttpUtil.doPostForm(url, BeanUtil.beanToMap(requestParms), headers);
  46. if (Objects.isNull(response)) {
  47. log.error("调用第三方接口获取Token失败");
  48. return null;
  49. }
  50. return response;
  51. }catch (Exception e){
  52. throw new RuntimeException("调用第三方接口发生异常", e);
  53. }
  54. }
  55. /**
  56. * 响应解密
  57. * @param response
  58. * @return
  59. */
  60. public JsonObject responseDecode(JsonObject response){
  61. try {
  62. if (Objects.isNull(response)) {
  63. log.error("第三方接口响应数据为空");
  64. return null;
  65. }
  66. Gson gson = new Gson();
  67. ResponseParmsEntity responseParms = gson.fromJson(response, ResponseParmsEntity.class);
  68. String data = responseParms.getRet() + responseParms.getMsg() + responseParms.getData();
  69. boolean verify = HmacMD5Util.verify(data, ConnectivityConstants.PLATFORM_SIG_SECRET, responseParms.getSig());
  70. if (!verify) {
  71. log.error("第三方接口响应数据签名验证失败");
  72. return null;
  73. }
  74. if (responseParms.getRet() != 0){
  75. switch (responseParms.getRet()) {
  76. case -1:
  77. log.error("系统繁忙,此时请求方稍后重试");
  78. break;
  79. case 4001:
  80. log.error("签名错误");
  81. break;
  82. case 4002:
  83. log.error("Token错误");
  84. break;
  85. case 4003:
  86. log.error("参数不合法,缺少必需的示例:OperatorID、Sig、TimeStamp、Data、Seq五个参数");
  87. break;
  88. case 4004:
  89. log.error("请求的业务参数不合法,各接口定义自己的必须参数");
  90. break;
  91. case 500:
  92. log.error("系统错误");
  93. break;
  94. }
  95. }
  96. String decodeData = AesCryptoUtil.decrypt(responseParms.getData(), ConnectivityConstants.PLATFORM_DATA_SECRET,
  97. ConnectivityConstants.PLATFORM_DATA_SECRET_IV);
  98. return gson.fromJson(decodeData, JsonObject.class);
  99. }catch (Exception e){
  100. throw new RuntimeException("第三方接口响应发生异常", e);
  101. }
  102. }
  103. }