skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java
@@ -1,6 +1,9 @@ package cn.gistack.sm.intelligentCall.controller; import cn.gistack.sm.intelligentCall.constant.CallConstant; import cn.gistack.sm.intelligentCall.entity.ThirdBaseParam; import cn.gistack.sm.intelligentCall.entity.ThirdPartyResult; import cn.gistack.sm.intelligentCall.entity.ThirdRequestHead; import cn.gistack.sm.intelligentCall.entity.User; import cn.gistack.sm.intelligentCall.util.HttpClientUtils; import com.alibaba.fastjson.JSON; @@ -18,6 +21,7 @@ import static cn.gistack.sm.intelligentCall.util.CallUtil.getRandom; import static cn.gistack.sm.intelligentCall.util.CallUtil.getToken; import static cn.gistack.sm.intelligentCall.util.ThirdPartyValidate.validateToken; /** * 智能呼叫控制层 @@ -48,7 +52,66 @@ * 创建任务 * @return */ public String createCallUtil(){ @GetMapping("/createCall1") public R createCall1(){ // 请求 Map<String, Object> map = new HashMap<>(); map.put("p1",createCallUtil()); // 返回 return R.data(map); } /** * 创建任务 * @return */ public static String createCallUtil(){ Date date = new Date(); String dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(date); String transId = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date) + getRandom(); Map<String, Object> map = new HashMap<>(); map.put("taskName","测试"); map.put("sceneId",230); map.put("callingNumbers", Arrays.asList("00862787222298")); map.put("taskScheduleTime",dateFormat); List<Map<String,Object>> list = new ArrayList<>(); Map<String,Object> maps = new HashMap<>(); maps.put("被叫号码","15170720695"); maps.put("水库名称","测试水库"); maps.put("超汛限多少米","0"); maps.put("水库编码","1241241122"); maps.put("用户名","zrj"); maps.put("用户id","123456"); list.add(maps); map.put("calleeData",list); ThirdBaseParam thirdBaseParam = new ThirdBaseParam(); ThirdRequestHead thirdRequestHead = new ThirdRequestHead(); thirdRequestHead.setAppId(CallConstant.AppKey); thirdRequestHead.setTimestamp(timestamp); thirdRequestHead.setToken(getToken(timestamp, transId, map)); thirdRequestHead.setTransId(transId); thirdBaseParam.setHead(thirdRequestHead); thirdBaseParam.setSecretString(JSON.toJSONString(map)); // 验证token boolean b = validateToken(thirdBaseParam, CallConstant.AppSecret, new ThirdPartyResult()); System.out.println("token 验证结果 = " + b); String token = getToken(timestamp, transId, map); String url = CallConstant.HOST + CallConstant.createTaskUrl1; String httpPost = HttpClientUtils.httpPost(url, CallConstant.AppKey, timestamp, transId, token, map); // 返回 return httpPost; } /** * 创建任务 * @return */ public static String createCallUtil1(){ Date date = new Date(); String dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(date); @@ -71,8 +134,33 @@ map.put("calleeData",list); String token = getToken(timestamp, transId, map); String jsonString = JSON.toJSONString(map); HashMap<Object, Object> hashMap = new HashMap<>(4); hashMap.put("appId",CallConstant.AppKey); hashMap.put("timestamp",timestamp); hashMap.put("transId",transId); hashMap.put("token",token); Map<String, String> stringHashMap = new HashMap<>(); stringHashMap.put("head",hashMap.toString()); stringHashMap.put("body",jsonString); ThirdBaseParam thirdBaseParam = new ThirdBaseParam(); ThirdRequestHead thirdRequestHead = new ThirdRequestHead(); thirdRequestHead.setAppId(CallConstant.AppKey); thirdRequestHead.setTimestamp(timestamp); thirdRequestHead.setToken(token); thirdRequestHead.setTransId(transId); thirdBaseParam.setHead(thirdRequestHead); thirdBaseParam.setSecretString(JSON.toJSONString(map)); // 验证token boolean b = validateToken(thirdBaseParam, CallConstant.AppSecret, new ThirdPartyResult()); System.out.println("token 验证结果 = " + b); String url = CallConstant.HOST + CallConstant.createTaskUrl1; String httpPost = HttpClientUtils.httpPost(url, CallConstant.AppKey, timestamp, transId, token, map); String httpPost = HttpClientUtils.doPost(url, stringHashMap); // 返回 return httpPost; } @@ -84,31 +172,10 @@ // * @param args // */ // public static void main(String[] args) { // Date date = new Date(); // String dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); // String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(date); // String transId = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date) + getRandom(); // // Map<String, Object> map = new HashMap<>(); // map.put("taskName","测试"); // map.put("sceneId",230); // map.put("callingNumbers", Arrays.asList("00862787222298")); // map.put("taskScheduleTime",dateFormat); // List<Map<String,Object>> list = new ArrayList<>(); // Map<String,Object> maps = new HashMap<>(); // maps.put("被叫号码","15170720695"); // maps.put("水库名称","测试水库"); // maps.put("超汛限多少米","0"); // maps.put("水库编码","1241241122"); // maps.put("用户名","zrj"); // maps.put("用户id","123456"); // list.add(maps); // map.put("calleeData",list); // map.put("p1",createCallUtil()); //// map.put("p1",createCallUtil()); // // String token = getToken(timestamp, transId, map); // String url = CallConstant.HOST + CallConstant.createTaskUrl1; // String httpPost = HttpClientUtils.httpPost(url, CallConstant.AppKey, timestamp, transId, token, map); // System.out.println("httpPost = " + httpPost); // } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/Head.java
New file @@ -0,0 +1,9 @@ package cn.gistack.sm.intelligentCall.entity; import lombok.Data; @Data public class Head { private String appId; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdBaseParam.java
New file @@ -0,0 +1,11 @@ package cn.gistack.sm.intelligentCall.entity; import lombok.Data; @Data public class ThirdBaseParam { private ThirdRequestHead head; private String secretString; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdCallDetailParam.java
New file @@ -0,0 +1,9 @@ package cn.gistack.sm.intelligentCall.entity; import lombok.Data; @Data public class ThirdCallDetailParam { private String calleeNumber; private Integer taskId; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdCreateTaskParam.java
New file @@ -0,0 +1,12 @@ package cn.gistack.sm.intelligentCall.entity; import lombok.Data; @Data public class ThirdCreateTaskParam { private String taskName; private String scenesId; private String[] callingNumbers; private String calleeData; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdDetailParam.java
New file @@ -0,0 +1,8 @@ package cn.gistack.sm.intelligentCall.entity; import lombok.Data; @Data public class ThirdDetailParam { private String body; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdPartyResult.java
New file @@ -0,0 +1,9 @@ package cn.gistack.sm.intelligentCall.entity; import lombok.Data; @Data public class ThirdPartyResult { private String errorMessage; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdPlainResult.java
New file @@ -0,0 +1,9 @@ package cn.gistack.sm.intelligentCall.entity; import lombok.Data; @Data public class ThirdPlainResult { private String errorMessage; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdRequestHead.java
New file @@ -0,0 +1,11 @@ package cn.gistack.sm.intelligentCall.entity; import lombok.Data; @Data public class ThirdRequestHead { private String appId; private String timestamp; private String transId; private String token; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdRequestParam.java
New file @@ -0,0 +1,13 @@ package cn.gistack.sm.intelligentCall.entity; import lombok.Data; import java.util.Map; @Data public class ThirdRequestParam { private Head head; private String body; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/util/CallUtil.java
@@ -2,6 +2,7 @@ import cn.gistack.sm.intelligentCall.constant.CallConstant; import com.alibaba.fastjson.JSON; import org.springframework.util.DigestUtils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -24,39 +25,11 @@ builder.append(CallConstant.AppKey) .append("timestamp").append(timestamp) .append("transId").append(transId) .append(CallConstant.AppSecret); // .append(body).append(CallConstant.AppSecret); String formatString = builder.toString(); // md5 小写,md5 生成token String token = encryption(formatString); // 返回 return token; } /** * 计算token1 * @param url * @return */ public static String getToken1(String url){ // 计算token Date date = new Date(); String dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(date); String transId = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date) + getRandom(); // 请求参数拼接 String body ="{\"callingumbers\":[\"01086394068\"], \"calleeData\":[{\"被叫号码\":\"15170720695\"\"bizId\":\"1\"}]"+ ",\"scenesId\":2268,\"taskSchedulelime\":\"2023-04-23 16:30:00\",\"taskNamel\":\"thirdCreatelask7\"}"; // 拼接 StringBuilder builder = new StringBuilder("appId"); builder.append(CallConstant.AppKey) .append("timestamp").append(timestamp) .append("transId").append(transId) .append(body).append(CallConstant.AppSecret); String formatString = builder.toString(); // String formatString = builder.toString(); // md5 小写,md5 生成token String token = encryption(formatString); String token = DigestUtils.md5DigestAsHex(builder.toString().getBytes()); // String token = encryption(builder.toString()); // 返回 return token; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/util/ThirdPartyValidate.java
New file @@ -0,0 +1,169 @@ package cn.gistack.sm.intelligentCall.util; import cn.gistack.sm.intelligentCall.constant.CallConstant; import cn.gistack.sm.intelligentCall.entity.*; import com.alibaba.fastjson.JSON; //import com.yunli.call.api.param.third.*; //import com.yunli.call.code.CallValidateCodeEnum; //import com.yunli.call.result.ThirdPartyResult; //import com.yunli.call.result.ThirdPlainResult; import lombok.extern.slf4j.Slf4j; //import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang3.ArrayUtils; import org.springframework.util.DigestUtils; import org.springframework.util.StringUtils; /** * @author conanzhang@木森 * @description * @date 2019-12-02 16:37 * @classname ThirdPartyValidate */ @Slf4j public class ThirdPartyValidate { /** * 验证创建任务的参数 * * @param requestParam * @param thirdPartyResult * @return */ public static boolean createTaskValidate(ThirdRequestParam requestParam, ThirdPartyResult thirdPartyResult) { if (requestParam.getHead() == null || requestParam.getBody() == null) { thirdPartyResult.setErrorMessage("TOKEN_VALIDATE_ERROR"); return true; } if (!StringUtils.hasText(requestParam.getHead().getAppId())) { thirdPartyResult.setErrorMessage("TOKEN_VALIDATE_ERROR"); return true; } ThirdCreateTaskParam taskParam = JSON.parseObject(requestParam.getBody(), ThirdCreateTaskParam.class); if (!StringUtils.hasText(taskParam.getTaskName())) { thirdPartyResult.setErrorMessage("TASK_NAME_NOT_NULL"); return true; } if (taskParam.getScenesId() == null) { thirdPartyResult.setErrorMessage("PARAM_SCENE_ID_IS_NULL"); return true; } if (taskParam.getCallingNumbers() == null || ArrayUtils.isEmpty(taskParam.getCallingNumbers())) { thirdPartyResult.setErrorMessage("TASK_CALL_NUM_NOT_NULL"); return true; } if (!StringUtils.hasText(taskParam.getCalleeData())) { log.info("param:{}", JSON.toJSONString(requestParam)); thirdPartyResult.setErrorMessage("TOKEN_CALLEE_VALIDATE_ERROR"); return true; } return false; } /** * token验证 * * @param appSecret * @param thirdBaseParam * @param appSecret * @return boolean * @date 2019/12/5 **/ public static boolean validateToken(ThirdBaseParam thirdBaseParam, String appSecret, ThirdPartyResult thirdPartyResult) { if (!StringUtils.hasText(appSecret)) { log.info("param:{}", JSON.toJSONString(thirdBaseParam)); thirdPartyResult.setErrorMessage("TOKEN_VALIDATE_ERROR"); return true; } String signString = getThirdSignString(thirdBaseParam, appSecret); String sign = DigestUtils.md5DigestAsHex(signString.getBytes()); if (!sign.equals(thirdBaseParam.getHead().getToken())) { log.info("appId:{},token:{},sign:{},param:{}", thirdBaseParam.getHead().getAppId(), thirdBaseParam.getHead().getToken(), sign, thirdBaseParam.getSecretString()); thirdPartyResult.setErrorMessage("TOKEN_VALIDATE_ERROR"); return true; } return false; } /** * 任务查询参数验证 * * @param thirdDetailParam * @param thirdPlainResult * @return */ public static boolean callDetail(ThirdDetailParam thirdDetailParam, ThirdPlainResult thirdPlainResult) { ThirdCallDetailParam callDetailParam = JSON.parseObject(thirdDetailParam.getBody(), ThirdCallDetailParam.class); if (callDetailParam == null) { thirdPlainResult.setErrorMessage("TOKEN_CALLEE_VALIDATE_ERROR"); return true; } if (!StringUtils.hasText(callDetailParam.getCalleeNumber())) { thirdPlainResult.setErrorMessage("TOKEN_CALLEE_VALIDATE_ERROR"); return true; } if (callDetailParam.getTaskId() == null || callDetailParam.getTaskId() == 0) { thirdPlainResult.setErrorMessage("TASK_ID_NOT_VALID"); return true; } return false; } /** * 获取加密字符串 * * @param thirdBaseParam * @param appSecret * @return java.lang.String * @date 2019/12/20 **/ private static String getThirdSignString(ThirdBaseParam thirdBaseParam, String appSecret) { ThirdRequestHead headParam = thirdBaseParam.getHead(); StringBuilder sb = new StringBuilder("appId"); sb.append(headParam.getAppId()) .append("timestamp").append(headParam.getTimestamp()) .append("transId").append(headParam.getTransId()) .append(thirdBaseParam.getSecretString()!=null?thirdBaseParam.getSecretString():"").append(appSecret); return sb.toString(); } // public static void main(String[] args) { // String body = "{\"callingNumbers\":[\"01086394068\"],\"calleeData\":[{\"被叫号码\":\"13387565100\",\"bizId\":\"1\"}]"+ // ",\"scenesId\":2268,\"taskScheduleTime\":\"2020-07-22 00:00:00\",\"taskName\":\"thirdCreateTask7\"}"; // // StringBuilder sb = new StringBuilder("appId"); // sb.append("zhonganinsurance") // .append("timestamp").append("1595314778") // .append("transId").append("22") // .append(body).append("ea3b23ecdb2247e9bcbccbdee7d5dbf4"); // System.out.println(sb.toString()); // String sign = DigestUtils.md5DigestAsHex(sb.toString().getBytes()); // System.out.println(sign); // // ThirdBaseParam thirdBaseParam = new ThirdBaseParam(); // ThirdRequestHead thirdRequestHead = new ThirdRequestHead(); // thirdRequestHead.setAppId("zhonganinsurance"); // thirdRequestHead.setTimestamp("1595314778"); // thirdRequestHead.setToken(sign); // thirdRequestHead.setTransId("22"); // thirdBaseParam.setHead(thirdRequestHead); // thirdBaseParam.setSecretString(body); // // // 验证token // boolean b = validateToken(thirdBaseParam, "ea3b23ecdb2247e9bcbccbdee7d5dbf4", new ThirdPartyResult()); // System.out.println("b = " + b); // // // 任务查询参数验证 // ThirdRequestParam thirdRequestParam = new ThirdRequestParam(); // Head head = new Head(); // head.setAppId("zhonganinsurance"); // thirdRequestParam.setHead(head); // thirdRequestParam.setBody(body); // boolean b1 = createTaskValidate(thirdRequestParam, new ThirdPartyResult()); // System.out.println("b1 = " + b1); // } }