| @@ -30,7 +30,7 @@ public class WechatCalllbackController extends BaseController { | |||||
| @RequestMapping(value = "/notify", method = RequestMethod.POST) | @RequestMapping(value = "/notify", method = RequestMethod.POST) | ||||
| public Object receiveTicket(HttpServletRequest request) throws IOException { | public Object receiveTicket(HttpServletRequest request) throws IOException { | ||||
| logger.info("[" +getIpAddr() + "]接收微信请求"); | |||||
| logger.info("[" +getIpAddr() + "]接收微信请求 /wxOpen/notify"); | |||||
| InputStream inStream = request.getInputStream(); | InputStream inStream = request.getInputStream(); | ||||
| ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); | ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); | ||||
| byte[] buffer = new byte[1024]; | byte[] buffer = new byte[1024]; | ||||
| @@ -44,21 +44,16 @@ public class WechatCalllbackController extends BaseController { | |||||
| outSteam.close(); | outSteam.close(); | ||||
| inStream.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( | logger.info( | ||||
| "\n接收微信请求:[signature=[{}], encType=[{}], msgSignature=[{}]," | "\n接收微信请求:[signature=[{}], encType=[{}], msgSignature=[{}]," | ||||
| + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ", | + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ", | ||||
| signature, encType, msgSignature, timestamp, nonce, requestBody); | |||||
| signature, encType, msgSignature, timestamp, nonce, resultxml); | |||||
| if (!StringUtils.equalsIgnoreCase("aes", encType) | if (!StringUtils.equalsIgnoreCase("aes", encType) | ||||
| || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) { | || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) { | ||||
| @@ -66,7 +61,7 @@ public class WechatCalllbackController extends BaseController { | |||||
| } | } | ||||
| // aes加密的消息 | // aes加密的消息 | ||||
| WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(requestBody, | |||||
| WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(resultxml, | |||||
| wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature); | wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature); | ||||
| this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString()); | this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString()); | ||||
| try { | try { | ||||
| @@ -80,18 +75,32 @@ public class WechatCalllbackController extends BaseController { | |||||
| } | } | ||||
| @RequestMapping("/{appId}/callback") | @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( | logger.info( | ||||
| "\n接收微信请求:[appId=[{}], openid=[{}], signature=[{}], encType=[{}], msgSignature=[{}]," | "\n接收微信请求:[appId=[{}], openid=[{}], signature=[{}], encType=[{}], msgSignature=[{}]," | ||||
| + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ", | + " 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) | if (!StringUtils.equalsIgnoreCase("aes", encType) | ||||
| || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) { | || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) { | ||||
| throw new IllegalArgumentException("非法请求,可能属于伪造的请求!"); | throw new IllegalArgumentException("非法请求,可能属于伪造的请求!"); | ||||
| @@ -99,7 +108,7 @@ public class WechatCalllbackController extends BaseController { | |||||
| String out = ""; | String out = ""; | ||||
| // aes加密的消息 | // aes加密的消息 | ||||
| WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(requestBody, | |||||
| WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(resultxml, | |||||
| wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature); | wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature); | ||||
| this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString()); | this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString()); | ||||
| // 全网发布测试用例 | // 全网发布测试用例 | ||||