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 请求的方法名称
扫描二维码关注公众号,回复: 13555115 查看本文章 -
@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;
}
}
-