教育训练处考试制证系统后端
huangzhen
2023-09-25 1614615fc9319b8626eb028598b894311992c033
ruoyi-common/src/main/java/com/ruoyi/common/signature/SignatureUtils.java
@@ -1,6 +1,9 @@
package com.ruoyi.common.signature;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.enums.HttpMethod;
import com.ruoyi.common.exception.ServiceException;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpStatus;
@@ -8,6 +11,8 @@
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
@@ -39,10 +44,22 @@
   /**
    * 获取数据接口
    * @param getQueryParam
    * @param queryParam
    * @param url
    * @param method
    * @return
    */
   public static Object getObject(String getQueryParam,String url){
   public static String getObject(String queryParam, String url, HttpMethod method){
      if(method.equals(HttpMethod.GET)){
         return getMethod(url, queryParam);
      }
      if(method.equals(HttpMethod.POST)){
         return postMethod(url,queryParam);
      }
      return null;
   }
   private static String getMethod(String url,String queryParam){
      // 时间戳
      Long ts = Calendar.getInstance().getTime().getTime();
      // 随机数
@@ -50,10 +67,10 @@
      // 接口header 中的公共参数
      String commonParamUrl = String.format("appKey=%s" + "&" + "ts=%s" + "&" + "once=%s" + "&" + "signMethod=%s", appKey, ts, once, signMethod);
      String getFullUrl = restSever + url + "?" + getQueryParam;
      String getFullUrl = restSever + url + "?" + queryParam;
      HttpGet httpGet = new HttpGet(getFullUrl);
      // get 请求查询参数, 用在 URL 上的, 这里若是通过 ID 查询的, 接口中 ID 是作为路径存在的, 所以需要将 ID 组成
      String getAllParamUrl = commonParamUrl + "&" + getQueryParam;
      String getAllParamUrl = commonParamUrl + "&" + queryParam;
      // 创建 HttpClient 对象
      CloseableHttpClient httpclient = (CloseableHttpClient) SkipHttpsUtils.wrapClient();
      // 对参数签名, 并放入请求 header 中的 signData 参数中
@@ -66,12 +83,9 @@
         httpGet.addHeader("ts", ts.toString());
         httpGet.addHeader("once", once);
         httpGet.addHeader("signMethod", signMethod);
         System.out.println("once:" + once);
         httpGet.addHeader("signData", signData);
         System.out.println("headers:" + httpGet.getAllHeaders());
         String urlStr = httpGet.getURI().toString();
         // 公共参数 URL
         System.out.println("commonParamter:" + urlStr);
         if (StringUtils.endsWith(urlStr, "/")) {
            urlStr = StringUtils.removeEnd(urlStr, "/");
         }
@@ -79,7 +93,6 @@
         RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(6000)
               .setConnectionRequestTimeout(6000).setSocketTimeout(6000).build();
         httpGet.setConfig(requestConfig);
         System.out.println("urlStr in request:" + httpGet.getURI().toString());
         // 执行请求
         CloseableHttpResponse response = httpclient.execute(httpGet);
         // 取响应的结果
@@ -87,13 +100,66 @@
         // 打印响应结果
         if (statusCode == HttpStatus.SC_OK) {
            String resp = EntityUtils.toString(response.getEntity(), "utf-8");
            System.out.println("status:" + statusCode);
            Object object = JSON.parse(resp);
            System.out.println("result:" + resp);
            return object;
            Object object = JSONObject.parseObject(resp);
            return resp;
         } else {
            System.out.println(statusCode);
            throw new ServiceException("同步数据异常");
         }
      } catch (URISyntaxException e) {
         logger.error("签名失败: ", e);
      } catch (ClientProtocolException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
      return null;
   }
   private static String postMethod(String url, String bodyParam){
      // 时间戳
      Long ts = Calendar.getInstance().getTime().getTime();
      // 随机数
      String once = RandomStringUtils.randomAlphanumeric(32);
      // 接口header 中的公共参数
      String commonParamUrl = String.format("appKey=%s" + "&" + "ts=%s" + "&" + "once=%s" + "&" + "signMethod=%s", appKey, ts, once, signMethod);
      String postFullUrl = restSever + url;
      HttpPost httpPost = new HttpPost(postFullUrl);
      String postAllParamUrl = commonParamUrl + "&bodyData=" + bodyParam;
      // 创建 HttpClient 对象
      CloseableHttpClient httpclient = (CloseableHttpClient) SkipHttpsUtils.wrapClient();
      StringEntity bodyData = new StringEntity(bodyParam.toString(), "UTF-8");
      httpPost.setEntity(bodyData);
      // 对参数签名, 并放入请求 header 中的 signData 参数中
      try {
         // 签名数据
         String signData = TokenUtils.getSignature(appPwd, postAllParamUrl);
         // 添加 header 参数 appCode、 timestamp、 signatureNonce、 signature
         httpPost.addHeader("appKey", appKey);
         httpPost.addHeader("ts", ts.toString());
         httpPost.addHeader("once", once);
         httpPost.addHeader("signMethod", signMethod);
         httpPost.addHeader("signData", signData);
         String urlStr = httpPost.getURI().toString();
         // 公共参数 URL
         if (StringUtils.endsWith(urlStr, "/")) {
            urlStr = StringUtils.removeEnd(urlStr, "/");
         }
         httpPost.setURI(new URI(urlStr));
         RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(6000)
               .setConnectionRequestTimeout(6000).setSocketTimeout(6000).build();
         httpPost.setConfig(requestConfig);
         // 执行请求
         CloseableHttpResponse response = httpclient.execute(httpPost);
         // 取响应的结果
         int statusCode = response.getStatusLine().getStatusCode();
         // 打印响应结果
         if (statusCode == HttpStatus.SC_OK) {
            String resp = EntityUtils.toString(response.getEntity(), "utf-8");
            Object object = JSON.parse(resp);
            return resp;
         } else {
            throw new ServiceException("同步数据异常");
         }
      } catch (URISyntaxException e) {
         logger.error("签名失败: ", e);
@@ -110,7 +176,7 @@
       * GET 查询接口演示代码
       */
      String startTime = "2018-05-25 00:00:00";
      String endTime = "2023-06-01 21:00:00";
      String endTime = "2023-09-01 21:00:00";
      try {
         startTime = URLEncoder.encode(startTime, "UTF-8");
         endTime = URLEncoder.encode(endTime, "UTF-8");
@@ -119,8 +185,16 @@
      }
      String getQueryParam = "startTime=" + startTime + "&endTime=" + endTime;
      System.out.println(getQueryParam);
       Object obj = getObject(getQueryParam,"/api/v1/exam/plan/enroll/download");
      Object obj = getObject(getQueryParam,"/api/v1/exam/plan/enroll/download",HttpMethod.GET);
      System.out.println(obj);
      System.out.println("********************************************************************************************************************************");
      System.out.println("********************************************************************************************************************************");
      NcCertQuery1 ncCertQuery1 = new NcCertQuery1();
      ncCertQuery1.setIdcardTypeCode("01");
      ncCertQuery1.setIdcardNum("362421197712217718");
      String bodyParam = JSON.toJSONString(ncCertQuery1);
      Object obj2 = getObject(bodyParam,"/api/v1/cert/query",HttpMethod.POST);
      System.out.println(obj2);
   }