Commit e73ddb98 authored by hongguangwu's avatar hongguangwu

MVP1.7.16-法大大

parent 0ed5f058
package com.yifu.cloud.plus.v1.yifu.archives.controller; package com.yifu.cloud.plus.v1.yifu.archives.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fadada.api.utils.crypt.FddCryptUtil;
import com.fasc.open.api.constants.RequestConstants;
import com.fasc.open.api.exception.ApiException; import com.fasc.open.api.exception.ApiException;
import com.fasc.open.api.utils.crypt.FddCryptUtil; import com.yifu.cloud.plus.v1.yifu.archives.config.FascConfig;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascPushLog;
import com.yifu.cloud.plus.v1.yifu.archives.service.FascService; import com.yifu.cloud.plus.v1.yifu.archives.service.FascService;
import com.yifu.cloud.plus.v1.yifu.archives.service.TFascPushLogService;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -26,6 +39,13 @@ public class FascController { ...@@ -26,6 +39,13 @@ public class FascController {
@Autowired @Autowired
private FascService fascService; private FascService fascService;
@Autowired
private FascConfig fascConfig;
private final TFascPushLogService tFascPushLogService;
private static String FASC_EVENT = "X-FASC-Event";
private static String FASC_BIZ_CONTENT = "bizContent";
/** /**
* @param templateName 签署任务模板名称,如果传了该参数,会根据名称模糊匹配查询,长度最大100个字符。 * @param templateName 签署任务模板名称,如果传了该参数,会根据名称模糊匹配查询,长度最大100个字符。
...@@ -81,7 +101,7 @@ public class FascController { ...@@ -81,7 +101,7 @@ public class FascController {
// 法大大回调 // 法大大回调
@ResponseBody /*@ResponseBody
@PostMapping(value = "/api/fascCallback") @PostMapping(value = "/api/fascCallback")
public String fddEventCallback(@RequestHeader HttpHeaders headers, public String fddEventCallback(@RequestHeader HttpHeaders headers,
@RequestParam("bizContent") String bizContent) throws Exception { @RequestParam("bizContent") String bizContent) throws Exception {
...@@ -113,6 +133,70 @@ public class FascController { ...@@ -113,6 +133,70 @@ public class FascController {
return "{\"code\":\"200\";\"msg\":\"success\"}"; return "{\"code\":\"200\";\"msg\":\"success\"}";
} }
return "{\"code\":\"200\";\"msg\":\"success\"}"; return "{\"code\":\"200\";\"msg\":\"success\"}";
}*/
@Operation(summary = "异步通知", description = "异步通知")
@RequestMapping(value = "/api/fascCallback")
public R<String> notifyUrl(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 新增推送日志
TFascPushLog pushLog = new TFascPushLog();
pushLog.setTransReferenceId(fascConfig.getOpenId());
pushLog.setReturnData(JSON.toJSONString(request));
pushLog.setTaskStatus(CommonConstants.ONE_STRING);
pushLog.setTypeKey("签署任务事件,异步通知");
pushLog.setTypeName("签署任务事件,异步通知");
tFascPushLogService.save(pushLog);
if (checkSign(request)) {
return R.failed("验签失败");
}
String fddEvent = request.getHeader(FASC_EVENT);
String fddBizContent = request.getParameter(FASC_BIZ_CONTENT);
if (Common.isNotNull(fddEvent)) {
JSONObject jsonObject = JSON.parseObject(fddBizContent);
String taskId = jsonObject.getString("taskId");
String taskStatus = jsonObject.getString("taskStatus");
String signStatus = jsonObject.getString("signStatus");
String signerId = jsonObject.getString("signerId");
pushLog.setReturnData("fddEvent:" + fddEvent + ";fddBizContent:" + fddBizContent);
if (fddEvent.equals("sign-task-finished")) {
pushLog.setReturnData("签署任务完成事件:fddEvent:" + fddEvent + ";fddBizContent:" + fddBizContent);
return R.ok(null, "success");
} else if (fddEvent.equals("sign-task-canceled")) {
pushLog.setReturnData("签署任务撤销事件:fddEvent:" + fddEvent + ";fddBizContent:" + fddBizContent);
return R.ok(null, "success");
} else if (fddEvent.equals("sign-task-sign-failed")) {
pushLog.setReturnData("签署任务参与方签署失败事件:fddEvent:" + fddEvent + ";fddBizContent:" + fddBizContent);
return R.ok(null, "success");
} else if (fddEvent.equals("sign-task-abolish")) {
pushLog.setReturnData("签署任务作废事件:fddEvent:" + fddEvent + ";fddBizContent:" + fddBizContent);
return R.ok(null, "success");
}
}
tFascPushLogService.updateById(pushLog);
return R.ok(null, "success");
}
//验证签名,返回true表示失败
public boolean checkSign(HttpServletRequest request) throws Exception {
Map<String, String> paraMap = new HashMap<>();
paraMap.put(RequestConstants.APP_ID, request.getHeader(RequestConstants.APP_ID));
paraMap.put(RequestConstants.SIGN_TYPE, request.getHeader(RequestConstants.SIGN_TYPE));
paraMap.put(RequestConstants.TIMESTAMP, request.getHeader(RequestConstants.TIMESTAMP));
paraMap.put(RequestConstants.NONCE, request.getHeader(RequestConstants.NONCE));
paraMap.put(FASC_EVENT, request.getHeader(FASC_EVENT));
paraMap.put(FASC_BIZ_CONTENT, request.getParameter(FASC_BIZ_CONTENT));
//参数排序,ascii码排序
String sortParam = FddCryptUtil.sortParameters(paraMap);
//计算之后得到签名 该签名需要放到请求头
String signature = FddCryptUtil.sign(sortParam, request.getHeader(RequestConstants.TIMESTAMP), fascConfig.getAppSecret());
if (StringUtils.equals(signature, request.getHeader(RequestConstants.SIGN))) {
return false;
}
// 表示验签失败:
return true;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment