调用第三方接口工具类(该工具类结合【外部接口使用第一章(RSA工具使用)】)--- 外部接口使用第二章

package com.sport.sportactivityserver.common.utils.schoolfitness;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.sport.sportactivityserver.service.schoolfitness.SchoolUserService;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;

/**

  • @Description: 调用外部接口处理

  • @Author: zdj

  • @Date: 2021/07/16

  • @version: 1.0.0
    */
    public class OpenImplUtil {
    private static final Logger logger = LoggerFactory.getLogger(OpenImplUtil.class);

    // 测试环境
    // private static final String appId = “”;
    // private static final String urlstr = “”;

    // 正式环境
    private static final String appId = “”;
    private static final String urlstr = “”;

    /**

    • @param messageMap 请求的参数集合(非公共参数)

    • @param method 请求的方法名称

    • @param restTemplate http请求对象

    • @return 请求接口的结果对象 json

    • @throws Exception
      */
      @Transactional(rollbackFor = Exception.class)
      public JSONObject OpenImplInterfance(Map<String, String> messageMap, String method, RestTemplate restTemplate) throws Exception {
      //封装post 请求头,json,请求类型等
      HttpHeaders headers = new HttpHeaders();
      headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
      headers.setAccept(Lists.newArrayList(MediaType.APPLICATION_JSON));
      Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
      String reqSeq = System.currentTimeMillis() + “”+(int)(Math.round((Math.random()+1) * 1000)); // 17 位请求流水
      String reqsn = System.currentTimeMillis() + “”+(int)(Math.round((Math.random()+1) * 10000)); // 18 位请求序号
      messageMap.put(“reqsn”, reqsn);

      // 封装公共参数
      Map<String, String> openMap = new HashMap<>();
      openMap.put(“reqSeq”, reqSeq);
      openMap.put(“appId”, appId);
      openMap.put(“method”, method);
      openMap.put(“bizContent”, gson.toJson(messageMap)); // 单独参数需要单独封装–便于加密
      openMap.put(“sign_param”, “appId,method,bizContent”);

      // 使用私钥对参数生成签名
      openMap.put(“sign”, RSAUtil.rsaSign(openMap));
      String message = gson.toJson(openMap);
      logger.info(“请求报文:”+message);
      HttpEntity entity = new HttpEntity(message, headers);

      // 请求开放平台数据并获取请求结果
      ResponseEntity resp = restTemplate.postForEntity(urlstr, entity, String.class);
      String result = resp.getBody();
      JSONObject json = JSONObject.fromObject(result);
      logger.info(“返回的报文:”+json);
      if(json.getString(“success”).equals(“false”)){ // 数据没操作成功
      if(json.getString(“respDesc”).contains(“已有登记记录”)){
      json.put(“code”, 200);
      json.put(“msg”, “操作成功!”);
      } else {
      json.put(“code”, 500);
      json.put(“msg”, json.getString(“respDesc”));
      }
      } else {
      // 封装请求返回的结果进行验签
      Map<String, String> checkMap = new HashMap<>();
      checkMap.put(“reqSeq”, reqSeq);
      checkMap.put(“sign_param”, “success,value”);
      checkMap.put(“success”, json.getString(“success”));
      checkMap.put(“value”, json.getString(“value”));
      checkMap.put(“sign”, json.getString(“sign”));
      boolean valiteRes = RSAUtil.rsaCheck(checkMap);

       // 返回处理结果
       if(valiteRes){ // 验签成功
           json.put("code", 200);
           json.put("msg", "操作成功!");
       } else { // 验签失败
           json.put("code", 500);
           json.put("msg", "验签失败!");
       }
      

      }
      return json;
      }
      }

おすすめ

転載: blog.csdn.net/gelinwangzi_juge/article/details/120728611