diff --git a/src/main/java/com/yn/bftl/thirdparty/modules/chinaums/controller/ChinaumsCallBackController.java b/src/main/java/com/yn/bftl/thirdparty/modules/chinaums/controller/ChinaumsCallBackController.java index ab6f678..7738c31 100644 --- a/src/main/java/com/yn/bftl/thirdparty/modules/chinaums/controller/ChinaumsCallBackController.java +++ b/src/main/java/com/yn/bftl/thirdparty/modules/chinaums/controller/ChinaumsCallBackController.java @@ -1,6 +1,8 @@ package com.yn.bftl.thirdparty.modules.chinaums.controller; import com.alibaba.fastjson.JSON; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.yn.bftl.thirdparty.modules.chinaums.dto.MchApplicationsNoticeDTO; import com.yn.bftl.thirdparty.modules.chinaums.dto.byx.ByxMchApplicationsNoticeDTO; import com.yn.bftl.thirdparty.modules.chinaums.service.ChinaumsCallBackService; @@ -8,6 +10,8 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.redis.connection.util.ByteArrayWrapper; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -35,11 +39,42 @@ @ApiOperation(value = "回调") @RequestMapping(value = "/byx/result", method = RequestMethod.POST) - public ChinaumsCallBackVO callbackForByx(@Valid @RequestBody ByxMchApplicationsNoticeDTO byxMchApplicationsNoticeDTO) { + public ChinaumsCallBackVO callbackForByx(byte[] data) { + ByxMchApplicationsNoticeDTO byxMchApplicationsNoticeDTO = byteToObject(data); + validateParams(byxMchApplicationsNoticeDTO); log.info("回调通知,数据:" + JSON.toJSONString(byxMchApplicationsNoticeDTO)); return chinaumsCallBackService.callbackForByx(byxMchApplicationsNoticeDTO); } + private static void validateParams(ByxMchApplicationsNoticeDTO byxMchApplicationsNoticeDTO) { + if (byxMchApplicationsNoticeDTO == null) { + throw new RuntimeException("参数不正确"); + } + if (StringUtils.isEmpty(byxMchApplicationsNoticeDTO.getMsgType())) { + throw new RuntimeException("参数不正确"); + } + if (byxMchApplicationsNoticeDTO.getMsgBody() == null) { + throw new RuntimeException("参数不正确"); + } + } + + private static ByxMchApplicationsNoticeDTO byteToObject(byte[] data) { + if (data == null) { + log.error("回调参数异常"); + throw new RuntimeException("回调参数异常"); + } + ObjectMapper mapper = new ObjectMapper(); + ByteArrayWrapper wrapper = new ByteArrayWrapper(data); + String json = ""; + try { + json = mapper.writeValueAsString(wrapper); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + ByxMchApplicationsNoticeDTO byxMchApplicationsNoticeDTO = JSON.parseObject(json, ByxMchApplicationsNoticeDTO.class); + return byxMchApplicationsNoticeDTO; + } + @ApiOperation(value = "回调") @RequestMapping(value = "/result", method = RequestMethod.POST) public ChinaumsCallBackVO mchApplicationsResult(@Valid @RequestBody MchApplicationsNoticeDTO mchApplicationsNoticeDTO) {