From b3f81569a5e1c89d09202375748e1b827c043b4a Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Mon, 3 Dec 2018 13:20:15 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=8E=A5=E6=94=B6=E5=BE=AE=E4=BF=A1=E5=9B=9E?= =?UTF-8?q?=E8=B0=83][=E4=BF=AE=E6=94=B9]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WechatCalllbackController.java | 55 +++++++++++-------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WechatCalllbackController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WechatCalllbackController.java index c7ab85b85..d9852e9d1 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WechatCalllbackController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WechatCalllbackController.java @@ -30,7 +30,7 @@ public class WechatCalllbackController extends BaseController { @RequestMapping(value = "/notify", method = RequestMethod.POST) public Object receiveTicket(HttpServletRequest request) throws IOException { - logger.info("[" +getIpAddr() + "]接收微信请求"); + logger.info("[" +getIpAddr() + "]接收微信请求 /wxOpen/notify"); InputStream inStream = request.getInputStream(); ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; @@ -44,21 +44,16 @@ public class WechatCalllbackController extends BaseController { outSteam.close(); inStream.close(); - Map map = request.getParameterMap(); - logger.info(map.toString()); + String timestamp = request.getParameter("timestamp"); + String nonce = request.getParameter("nonce"); + String signature = request.getParameter("signature"); + String encType = request.getParameter("encrypt_type"); + String msgSignature= request.getParameter("msg_signature"); - return "success"; - } - - @RequestMapping(value = "/notify1", method = RequestMethod.POST) - public Object receiveTicket1(@RequestBody(required = false) String requestBody, @RequestParam("timestamp") String timestamp, - @RequestParam("nonce") String nonce, @RequestParam("signature") String signature, - @RequestParam(name = "encrypt_type", required = false) String encType, - @RequestParam(name = "msg_signature", required = false) String msgSignature) { logger.info( "\n接收微信请求:[signature=[{}], encType=[{}], msgSignature=[{}]," + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ", - signature, encType, msgSignature, timestamp, nonce, requestBody); + signature, encType, msgSignature, timestamp, nonce, resultxml); if (!StringUtils.equalsIgnoreCase("aes", encType) || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) { @@ -66,7 +61,7 @@ public class WechatCalllbackController extends BaseController { } // aes加密的消息 - WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(requestBody, + WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(resultxml, wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature); this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString()); try { @@ -80,18 +75,32 @@ public class WechatCalllbackController extends BaseController { } @RequestMapping("/{appId}/callback") - public Object callback(@RequestBody(required = false) String requestBody, - @PathVariable("appId") String appId, - @RequestParam("signature") String signature, - @RequestParam("timestamp") String timestamp, - @RequestParam("nonce") String nonce, - @RequestParam("openid") String openid, - @RequestParam("encrypt_type") String encType, - @RequestParam("msg_signature") String msgSignature) { + public Object callback(@PathVariable("appId") String appId, HttpServletRequest request) throws IOException { + logger.info("[" +getIpAddr() + "]接收微信请求 /{appId}/callback"); + InputStream inStream = request.getInputStream(); + ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int len = 0; + while ((len = inStream.read(buffer)) != -1) { + outSteam.write(buffer, 0, len); + } + String resultxml = new String(outSteam.toByteArray(), Charset.forName("UTF-8")); + logger.info(resultxml); + + outSteam.close(); + inStream.close(); + + String timestamp = request.getParameter("timestamp"); + String nonce = request.getParameter("nonce"); + String signature = request.getParameter("signature"); + String encType = request.getParameter("encrypt_type"); + String openid = request.getParameter("openid"); + String msgSignature= request.getParameter("msg_signature"); + logger.info( "\n接收微信请求:[appId=[{}], openid=[{}], signature=[{}], encType=[{}], msgSignature=[{}]," + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ", - appId, openid, signature, encType, msgSignature, timestamp, nonce, requestBody); + appId, openid, signature, encType, msgSignature, timestamp, nonce, resultxml); if (!StringUtils.equalsIgnoreCase("aes", encType) || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) { throw new IllegalArgumentException("非法请求,可能属于伪造的请求!"); @@ -99,7 +108,7 @@ public class WechatCalllbackController extends BaseController { String out = ""; // aes加密的消息 - WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(requestBody, + WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(resultxml, wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature); this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString()); // 全网发布测试用例