| @@ -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()); | |||
| // 全网发布测试用例 | |||