消息加密
需要到入庫:commons-io-2.4.jar,commons-codec-1.9.jar(在官網的Java微信加密demo下)
第一步:訪問https://mp.weixin.qq.com/wiki,下載AES加密的示例代碼
第二步:新建com.wtz.aes包,把實例代碼中的8個AES加密類復制進去,將這些類的包名改為com.wtz.aes,導入庫commons-codec-1.9.jar,選上面的Project下的Properties,點擊Java Build Path,Libraries,Add Library,選Junit 4,Next,Finish,OK,AES加密導入完成
第三步:找到包com.wtz.util,新建類Parameter.java類,存放參數token,encodingAESKey(隨機戳),corpId(AppID),這些在基本配置處可以得到
1 package com.wtz.util; 2 3 /** 4 * @author wangtianze QQ:864620012 5 * @date 2017年4月21日 下午9:27:50 6 * <p>version:1.0</p> 7 * <p>description:參數api</p> 8 */ 9 public class Parameter { 10 //token 11 public static String token = "wangtianze"; 12 //隨機戳 13 public static String encodingAESKey = "X78dYU3MXpijKArRbiozTRq0jZZnjxxvuB4n8KJwRH1"; 14 //應用AppID 15 public static String corpId = "wx9621c31e147dfdf9"; 16 }
第四步:找到包com.wtz.util下的MessageUtil.java類,修改parseXml方法
1 package com.wtz.util; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.Writer; 7 import java.util.HashMap; 8 import java.util.List; 9 import java.util.Map; 10 11 import javax.servlet.http.HttpServletRequest; 12 13 import org.dom4j.Document; 14 import org.dom4j.DocumentException; 15 import org.dom4j.Element; 16 import org.dom4j.io.SAXReader; 17 18 import com.thoughtworks.xstream.XStream; 19 import com.thoughtworks.xstream.core.util.QuickWriter; 20 import com.thoughtworks.xstream.io.HierarchicalStreamWriter; 21 import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; 22 import com.thoughtworks.xstream.io.xml.XppDriver; 23 import com.wtz.message.response.ImageMessage; 24 import com.wtz.message.response.MusicMessage; 25 import com.wtz.message.response.NewsMessage; 26 import com.wtz.message.response.TextMessage; 27 import com.wtz.message.response.VideoMessage; 28 import com.wtz.message.response.VoiceMessage; 29 30 /** 31 * @author wangtianze QQ:864620012 32 * @date 2017年4月19日 下午3:29:58 33 * <p>version:1.0</p> 34 * <p>description:消息處理工具類</p> 35 */ 36 public class MessageUtil { 37 //請求消息類型:文本 38 public static final String REQ_MESSAGE_TYPE_TEXT = "text"; 39 //請求消息類型:圖片 40 public static final String REQ_MESSAGE_TYPE_IMAGE = "image"; 41 //請求消息類型:語音 42 public static final String REQ_MESSAGE_TYPE_VOICE = "voice"; 43 //請求消息類型:視頻 44 public static final String REQ_MESSAGE_TYPE_VIDEO = "video"; 45 //請求消息類型:地理位置 46 public static final String REQ_MESSAGE_TYPE_LOCATION = "location"; 47 //請求消息類型:鏈接 48 public static final String REQ_MESSAGE_TYPE_LINK = "link"; 49 //請求消息類型:事件推送 50 public static final String REQ_MESSAGE_TYPE_EVENT = "event"; 51 52 //--------------------------------------------------------------- 53 54 //事件類型:subscribe(訂閱) 55 public static final String EVENT_TYPE_SUBSCRIBE = "subscribe"; 56 //事件類型:unsubscribe(取消訂閱) 57 public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe"; 58 //事件類型:scan(用戶已關注時的掃描帶參數的二維碼) 59 public static final String EVENT_TYPE_SCAN = "scan"; 60 //事件類型:LOCATION(上報地理位置) 61 public static final String EVENT_TYPE_LOCATION = "LOCATION"; 62 //事件類型:CLICK(自定義菜單) 63 public static final String EVENT_TYPE_CLICK = "CLICK"; 64 65 //--------------------------------------------------------------- 66 67 //響應消息類型:文本 68 public static final String RESP_MESSAGE_TYPE_TEXT = "text"; 69 //響應詳細類型:圖片 70 public static final String RESP_MESSAGE_TYPE_IMAGE = "image"; 71 //響應消息類型:語音 72 public static final String RESP_MESSAGE_TYPE_VOICE = "voice"; 73 //響應消息類型:視頻 74 public static final String RESP_MESSAGE_TYPE_VIDEO = "video"; 75 //響應詳細類型:音樂 76 public static final String RESP_MESSAGE_TYPE_MUSIC = "music"; 77 //響應消息類型:圖文 78 public static final String RESP_MESSAGE_TYPE_NEWS = "news"; 79 80 //--------------------------------------------------------------- 81 82 //-----------------------------------------老的,加密前--------------------------------------------- 83 // //從流中解析出每個節點的內容 84 // public static Map<String,String> parseXml(HttpServletRequest request) throws IOException{ 85 // Map<String,String> map = new HashMap<String,String>(); 86 // 87 // //從輸入流中獲取流對象 88 // InputStream in = request.getInputStream(); 89 // 90 // //構建SAX閱讀器對象 91 // SAXReader reader = new SAXReader(); 92 // try { 93 // //從流中獲得文檔對象 94 // Document doc = reader.read(in); 95 // 96 // //獲得根節點 97 // Element root = doc.getRootElement(); 98 // 99 // //獲取根節點下的所有子節點 100 // List<Element> children = root.elements(); 101 // 102 // for(Element e:children){ 103 // //遍歷每一個節點,並按照節點名--節點值放入map中 104 // map.put(e.getName(), e.getText()); 105 // System.out.println("用戶發送的消息XML解析為:" + e.getName() + e.getText()); 106 // } 107 // 108 // //關閉流 109 // in.close(); 110 // in = null; 111 // } catch (DocumentException e) { 112 // // TODO Auto-generated catch block 113 // e.printStackTrace(); 114 // } 115 // 116 // return map; 117 // } 118 //-----------------------------------------新的,加密后-------------------------------------------- 119 //從流中解析出每個節點的內容 120 public static Map<String,String> parseXml(String request) throws IOException{ 121 Map<String,String> map = new HashMap<String,String>(); 122 123 //從request中獲取流對象 124 InputStream in = new ByteArrayInputStream(request.getBytes("UTF-8")); 125 126 //構建SAX閱讀器對象 127 SAXReader reader = new SAXReader(); 128 try { 129 //從流中獲得文檔對象 130 Document doc = reader.read(in); 131 132 //獲得根節點 133 Element root = doc.getRootElement(); 134 135 //獲取根節點下的所有子節點 136 List<Element> children = root.elements(); 137 138 for(Element e:children){ 139 //遍歷每一個節點,並按照節點名--節點值放入map中 140 map.put(e.getName(), e.getText()); 141 System.out.println("用戶發送的消息XML解析為:" + e.getName() + e.getText()); 142 } 143 144 //關閉流 145 in.close(); 146 in = null; 147 } catch (DocumentException e) { 148 // TODO Auto-generated catch block 149 e.printStackTrace(); 150 } 151 152 return map; 153 } 154 //---------------------------------------------------------------------------------------------- 155 156 /** 157 * 用於擴展節點數據按照<ToUserName><![CDATA[toUser]]></ToUserName>,中間加了CDATA段 158 */ 159 private static XStream xstream = new XStream(new XppDriver(){ 160 public HierarchicalStreamWriter createWriter(Writer out){ 161 return new PrettyPrintWriter(out){ 162 boolean cdata = true; 163 public void startNode(String name,Class clazz){ 164 super.startNode(name,clazz); 165 } 166 167 protected void writeText(QuickWriter writer,String text){ 168 if(cdata){ 169 writer.write("<![CDATA["); 170 writer.write(text); 171 writer.write("]]>"); 172 }else{ 173 writer.write(text); 174 } 175 } 176 }; 177 } 178 }); 179 180 /** 181 * 將文本消息對象轉換成XML格式 182 * params:textMessage 文本消息對象 183 * return:xml 184 */ 185 public static String messageToXml(TextMessage textMessage){ 186 xstream.alias("xml",textMessage.getClass()); 187 return xstream.toXML(textMessage); 188 } 189 190 /** 191 * 將圖片消息對象轉換成XML格式 192 * params:imageMessage 193 * return:xml 194 */ 195 public static String messageToXml(ImageMessage imageMessage){ 196 xstream.alias("xml", imageMessage.getClass()); 197 return xstream.toXML(imageMessage); 198 } 199 200 /** 201 * 將語音消息對象轉換成XML格式 202 * params:voiceMessage 203 * return:xml 204 */ 205 public static String messageToXml(VoiceMessage voiceMessage){ 206 xstream.alias("xml",voiceMessage.getClass()); 207 return xstream.toXML(voiceMessage); 208 } 209 210 /** 211 * 將視頻消息對象轉換成XML格式 212 * params:videoMessage 213 * return:xml 214 */ 215 public static String messageToXml(VideoMessage videoMessage){ 216 xstream.alias("xml",videoMessage.getClass()); 217 return xstream.toXML(videoMessage); 218 } 219 220 /** 221 * 將音樂消息對象轉換成XML格式 222 * params:musicMessage 223 * return:xml 224 */ 225 public static String messageToXml(MusicMessage musicMessage){ 226 xstream.alias("xml",musicMessage.getClass()); 227 return xstream.toXML(musicMessage); 228 } 229 230 /** 231 * 將圖文消息對象轉換成XML格式 232 * params:newsMessage 233 * return:xml 234 */ 235 public static String messageToXml(NewsMessage newsMessage){ 236 xstream.alias("xml",newsMessage.getClass()); 237 return xstream.toXML(newsMessage); 238 } 239 }
第五步:找到包com.wtz.util下的ProcessService.java類,修改dealRequest方法
1 package com.wtz.util; 2 3 import java.io.IOException; 4 import java.util.Date; 5 import java.util.Map; 6 7 import javax.servlet.http.HttpServletRequest; 8 9 import com.wtz.dao.PostCodeDao; 10 import com.wtz.message.response.TextMessage; 11 12 /** 13 * @author wangtianze QQ:864620012 14 * @date 2017年4月19日 下午8:04:14 15 * <p>version:1.0</p> 16 * <p>description:核心服務類</p> 17 */ 18 public class ProcessService { 19 //定義數據訪問的dao 20 private static PostCodeDao dao = new PostCodeDao(); 21 22 //-----------------------------------老的,加密前-------------------------------------------------- 23 // public static String dealRequest(HttpServletRequest request){ 24 // //XML格式的消息數據 25 // String respXml = ""; 26 // //默認返回的文本消息內容 27 // String respContent = "未知的消息類型"; 28 // //調用parseXml方法解析請求消息 29 // Map<String, String> requestMap; 30 // try { 31 // requestMap = MessageUtil.parseXml(request); 32 // //發送方賬號 33 // String fromUserName = requestMap.get("FromUserName"); 34 // //開發者微信號 35 // String toUserName = requestMap.get("ToUserName"); 36 // //消息類型 37 // String MsgType = requestMap.get("MsgType"); 38 // //消息內容 39 // String content = requestMap.get("Content"); 40 // 41 // //回復文本消息 42 // TextMessage textMessage = new TextMessage(); 43 // textMessage.setToUserName(fromUserName); 44 // textMessage.setFromUserName(toUserName); 45 // textMessage.setCreateTime(new Date().getTime()); 46 // textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT); 47 // 48 // if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){ 49 // respContent = "感謝您關注【王天澤的服務號】\n" + "微信號:wangtianze1\n" + "請回復序號:\n" + "1.查郵政編碼\n" + "2.查電話區號\n" + "?.返回幫助菜單\n"; 50 // if(content.equals("1")){ 51 // respContent = "請按照格式輸入地區名,例如輸入 郵編:東城"; 52 // } 53 // if(content.equals("2")){ 54 // respContent = "請按照格式輸入地區名,例如輸入 區號:東城"; 55 // } 56 // if(content.equals("?")){ 57 // respContent = "感謝您關注【王天澤的服務號】\n" + "微信號:wangtianze1\n" + "請回復序號:\n" + "1.查郵政編碼\n" + "2.查電話區號\n" + "?.返回幫助菜單\n"; 58 // } 59 // if(content.startsWith("郵編:")){ 60 // int pos = content.indexOf(":"); 61 // String cityName = content.substring(pos + 1); 62 // respContent = dao.findPostCodeByCityName(cityName); 63 // System.out.println("郵編:respContent:" + respContent); 64 // } 65 // if(content.startsWith("區號:")){ 66 // int pos = content.indexOf(":"); 67 // String cityName = content.substring(pos + 1); 68 // respContent = dao.findTelCodeByCityName(cityName); 69 // System.out.println("區號:respContent:" + respContent); 70 // } 71 // }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){ 72 // respContent = "您發送的是圖片消息"; 73 // }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)){ 74 // respContent = "您發送的是語音消息"; 75 // }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)){ 76 // respContent = "您發送的是視頻消息"; 77 // }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)){ 78 // respContent = "您發送的是地理位置消息"; 79 // }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)){ 80 // respContent = "您發送的是鏈接消息"; 81 // }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)){ 82 // //事件類型 83 // String eventType = requestMap.get("Event"); 84 // if(eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)){ 85 // respContent = "感謝您關注【王天澤的服務號】\n" + "微信號:wangtianze1\n" + "請回復序號:\n" + "1.查郵政編碼\n" + "2.查電話區號\n" + "?.返回幫助菜單\n"; 86 // }else if(eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)){ 87 // //TODO 取消訂閱后用戶不會再收到公眾號發送的消息,因此不需要回復 88 // }else if(eventType.equals(MessageUtil.EVENT_TYPE_SCAN)){ 89 // //TODO 處理掃描帶參數二維碼事件 90 // }else if(eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)){ 91 // //TODO 處理上報地理位置事件 92 // }else if(eventType.equals(MessageUtil.EVENT_TYPE_CLICK)){ 93 // //TODO 處理菜單點擊事件 94 // } 95 // } 96 // //設置文本消息的內容 97 // textMessage.setContent(respContent); 98 // //將文本消息對象轉換成xml 99 // respXml = MessageUtil.messageToXml(textMessage); 100 // } catch (IOException e) { 101 // // TODO Auto-generated catch block 102 // e.printStackTrace(); 103 // } 104 // 105 // return respXml; 106 // } 107 108 //----------------------------------------------新的,加密后--------------------------------------------- 109 public static String dealRequest(String request){ 110 //XML格式的消息數據 111 String respXml = ""; 112 //默認返回的文本消息內容 113 String respContent = "未知的消息類型"; 114 //調用parseXml方法解析請求消息 115 Map<String, String> requestMap; 116 try { 117 requestMap = MessageUtil.parseXml(request); 118 //發送方賬號 119 String fromUserName = requestMap.get("FromUserName"); 120 //開發者微信號 121 String toUserName = requestMap.get("ToUserName"); 122 //消息類型 123 String MsgType = requestMap.get("MsgType"); 124 //消息內容 125 String content = requestMap.get("Content"); 126 127 //回復文本消息 128 TextMessage textMessage = new TextMessage(); 129 textMessage.setToUserName(fromUserName); 130 textMessage.setFromUserName(toUserName); 131 textMessage.setCreateTime(new Date().getTime()); 132 textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT); 133 134 if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){ 135 respContent = "感謝您關注【王天澤的服務號】\n" + "微信號:wangtianze1\n" + "請回復序號:\n" + "1.查郵政編碼\n" + "2.查電話區號\n" + "?.返回幫助菜單\n"; 136 if(content.equals("1")){ 137 respContent = "請按照格式輸入地區名,例如輸入 郵編:東城"; 138 } 139 if(content.equals("2")){ 140 respContent = "請按照格式輸入地區名,例如輸入 區號:東城"; 141 } 142 if(content.equals("?")){ 143 respContent = "感謝您關注【王天澤的服務號】\n" + "微信號:wangtianze1\n" + "請回復序號:\n" + "1.查郵政編碼\n" + "2.查電話區號\n" + "?.返回幫助菜單\n"; 144 } 145 if(content.startsWith("郵編:")){ 146 int pos = content.indexOf(":"); 147 String cityName = content.substring(pos + 1); 148 respContent = dao.findPostCodeByCityName(cityName); 149 System.out.println("郵編:respContent:" + respContent); 150 } 151 if(content.startsWith("區號:")){ 152 int pos = content.indexOf(":"); 153 String cityName = content.substring(pos + 1); 154 respContent = dao.findTelCodeByCityName(cityName); 155 System.out.println("區號:respContent:" + respContent); 156 } 157 }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){ 158 respContent = "您發送的是圖片消息"; 159 }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)){ 160 respContent = "您發送的是語音消息"; 161 }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)){ 162 respContent = "您發送的是視頻消息"; 163 }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)){ 164 respContent = "您發送的是地理位置消息"; 165 }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)){ 166 respContent = "您發送的是鏈接消息"; 167 }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)){ 168 //事件類型 169 String eventType = requestMap.get("Event"); 170 if(eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)){ 171 respContent = "感謝您關注【王天澤的服務號】\n" + "微信號:wangtianze1\n" + "請回復序號:\n" + "1.查郵政編碼\n" + "2.查電話區號\n" + "?.返回幫助菜單\n"; 172 }else if(eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)){ 173 //TODO 取消訂閱后用戶不會再收到公眾號發送的消息,因此不需要回復 174 }else if(eventType.equals(MessageUtil.EVENT_TYPE_SCAN)){ 175 //TODO 處理掃描帶參數二維碼事件 176 }else if(eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)){ 177 //TODO 處理上報地理位置事件 178 }else if(eventType.equals(MessageUtil.EVENT_TYPE_CLICK)){ 179 //TODO 處理菜單點擊事件 180 } 181 } 182 //設置文本消息的內容 183 textMessage.setContent(respContent); 184 //將文本消息對象轉換成xml 185 respXml = MessageUtil.messageToXml(textMessage); 186 } catch (IOException e) { 187 // TODO Auto-generated catch block 188 e.printStackTrace(); 189 } 190 191 return respXml; 192 } 193 }
第六步:找到包com.wtz.service,修改LoginServlet.java類,修改doPost方法
1 package com.wtz.service; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.PrintWriter; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.http.HttpServlet; 9 import javax.servlet.http.HttpServletRequest; 10 import javax.servlet.http.HttpServletResponse; 11 12 import org.apache.commons.io.IOUtils; 13 14 import com.wtz.aes.AesException; 15 import com.wtz.aes.WXBizMsgCrypt; 16 import com.wtz.util.MessageUtil; 17 import com.wtz.util.Parameter; 18 import com.wtz.util.ProcessService; 19 import com.wtz.util.ValidationUtil; 20 21 /** 22 * @author wangtianze QQ:864620012 23 * @date 2017年4月17日 下午8:11:32 24 * <p>version:1.0</p> 25 * <p>description:微信請求驗證類</p> 26 */ 27 public class LoginServlet extends HttpServlet { 28 29 @Override 30 protected void doGet(HttpServletRequest request, HttpServletResponse response) 31 throws ServletException, IOException { 32 System.out.println("get請求。。。。。。"); 33 34 //1.獲得微信簽名的加密字符串 35 String signature = request.getParameter("signature"); 36 37 //2.獲得時間戳信息 38 String timestamp = request.getParameter("timestamp"); 39 40 //3.獲得隨機數 41 String nonce = request.getParameter("nonce"); 42 43 //4.獲得隨機字符串 44 String echostr = request.getParameter("echostr"); 45 46 System.out.println("獲得微信簽名的加密字符串:"+signature); 47 System.out.println("獲得時間戳信息:"+timestamp); 48 System.out.println("獲得隨機數:"+nonce); 49 System.out.println("獲得隨機字符串:"+echostr); 50 51 PrintWriter out = response.getWriter(); 52 53 //驗證請求確認成功原樣返回echostr參數內容,則接入生效,成為開發者成功,否則失敗 54 if(ValidationUtil.checkSignature(signature, timestamp, nonce)){ 55 out.print(echostr); 56 } 57 58 out.close(); 59 out = null; 60 } 61 62 /** 63 * 接受微信服務器發過來的XML數據包(通過post請求發送過來的) 64 */ 65 @Override 66 protected void doPost(HttpServletRequest request, HttpServletResponse response) 67 throws ServletException, IOException { 68 //將請求響應的編碼均設置為UTF-8,防止中文亂碼 69 request.setCharacterEncoding("UTF-8"); 70 response.setCharacterEncoding("UTF-8"); 71 72 //------------------------老的,不加密---------------------------- 73 // //獲取微信加密的簽名字符串 74 // String signature = request.getParameter("signature"); 75 // 76 // //獲取時間戳 77 // String timestamp = request.getParameter("timestamp"); 78 // 79 // //獲取隨機數 80 // String nonce = request.getParameter("nonce"); 81 // 82 // PrintWriter out = response.getWriter(); 83 // 84 // if(ValidationUtil.checkSignature(signature,timestamp,nonce)){ 85 // String respXml = ""; 86 // try { 87 // respXml = ProcessService.dealRequest(request); 88 // } catch (Exception e) { 89 // // TODO Auto-generated catch block 90 // e.printStackTrace(); 91 // } 92 // out.print(respXml); 93 // } 94 // out.close(); 95 // out = null; 96 //---------------------------新的,加密--------------------------- 97 //獲取微信加密的簽名字符串 98 String signature = request.getParameter("msg_signature"); 99 100 //獲取時間戳 101 String timestamp = request.getParameter("timestamp"); 102 103 //獲取隨機數 104 String nonce = request.getParameter("nonce"); 105 106 //從請求中讀取整個post數據 107 InputStream inputStream = request.getInputStream(); 108 109 //commons.io.jar方法,直接將流轉成字符串 110 String Post = IOUtils.toString(inputStream,"UTF-8"); 111 112 System.out.println("Post:" + Post); 113 114 String Msg = ""; 115 WXBizMsgCrypt wxcpt = null; 116 try { 117 wxcpt = new WXBizMsgCrypt(Parameter.token,Parameter.encodingAESKey,Parameter.corpId); 118 //解密消息 119 Msg = wxcpt.decryptMsg(signature,timestamp,nonce,Post); 120 } catch (AesException e) { 121 // TODO Auto-generated catch block 122 e.printStackTrace(); 123 } 124 //Msg打印結果 125 System.out.println("Msg打印結果:" + Msg); 126 127 //調用核心業務類接收消息,處理消息 128 String respMessage = ProcessService.dealRequest(Msg); 129 130 //respMessage打印結果 131 System.out.println("respMessage打印結果:" + respMessage); 132 133 String encryptMsg = ""; 134 try { 135 //加密回復消息 136 encryptMsg = wxcpt.encryptMsg(respMessage, timestamp, nonce); 137 System.out.println("encryptMsg:" + encryptMsg); 138 } catch (AesException e) { 139 // TODO Auto-generated catch block 140 e.printStackTrace(); 141 } 142 143 //響應消息 144 PrintWriter out = response.getWriter(); 145 out.print(encryptMsg); 146 out.close(); 147 } 148 }
消息加密完成。