Java微信二次開發(五)


消息加密

需要到入庫: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 }

消息加密完成。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM