@Controller @RequestMapping("/messageProcessing") public class WechatPushController { @Autowired private WechatPushService wechatPushService; @Autowired private WechatOAuthService wechatOAuthService; @Autowired private WechatUserService wechatUserService; /** * 確認請求來自微信服務器 */ @RequestMapping(value="/doGet",method=RequestMethod.GET) public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 微信加密簽名 String signature = request.getParameter("signature"); // 時間戳 String timestamp = request.getParameter("timestamp"); // 隨機數 String nonce = request.getParameter("nonce"); // 隨機字符串 String echostr = request.getParameter("echostr"); PrintWriter out = response.getWriter(); // 通過檢驗signature對請求進行校驗,若校驗成功則原樣返回echostr,表示接入成功,否則接入失敗 if (WechatSignUtil.checkSignature(signature, timestamp, nonce)) { out.print(echostr); } out.close(); out = null; } /** * 處理微信服務器發來的消息 */ @RequestMapping(value="/doGet",method=RequestMethod.POST) public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 將請求、響應的編碼均設置為UTF-8(防止中文亂碼) request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); // 調用核心業務類接收消息、處理消息 String respMessage = wechatPushService.processRequest(request); // 響應消息 PrintWriter out = response.getWriter(); out.print(respMessage); out.close(); }
