【微信Java開發 --2】接入微信公眾平台開發,配置自己的服務器,驗證過程【驗證服務器、自定義菜單、微信端消息分發】


接入微信公眾平台開發,開發者需要按照如下步驟完成:

1、填寫服務器配置
2、驗證服務器地址的有效性
3、依據接口文檔實現業務邏輯


好我們就開始:
1.登錄微信公眾平台,進入基本配置

 修改配置,將自己的服務器的URL地址,配置在此處:

填寫完成后,【先不用 提交】,先進行第二步 服務器端代碼的配置

 

注意:

如果想使用  自定義菜單等相關接口權限,需要注意:

 

可以看到  個人訂閱號是沒有 使用自定義菜單的相關接口能力的,如果需要使用的話,需要注冊服務號或使用測試號:

 

 那么 在服務器端代碼中使用的 測試AppId/Secret/Token等都需要重新設置為測試號的相關信息!

 

 

 

2.服務器端配置相關

服務器端相關代碼 思路:

 

  1>首先搭建web項目,使用maven管理架包,項目架構用spring+spring MVC+hibernate,pom.xml文件中,關於微信端開發的配置就是,就是使用weixin-java-tools項目使用java進行微信端開發

<!-- 微信開發工具包 -->
        
        <!-- https://mvnrepository.com/artifact/com.github.binarywang/weixin-java-common -->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-common</artifactId>
            <version>2.2.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.github.binarywang/weixin-java-mp -->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>2.2.0</version>
        </dependency>

 

完整pom.xml文件信息

  1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  2   <modelVersion>4.0.0</modelVersion>
  3   <groupId>com.sxd.wx1</groupId>
  4   <artifactId>wxSecond</artifactId>
  5   <version>0.0.1-SNAPSHOT</version>
  6   <packaging>war</packaging>
  7   <build>
  8       <plugins>
  9           <plugin>
 10               <artifactId>maven-war-plugin</artifactId>
 11               <configuration>
 12                   <version>3.0</version>
 13               </configuration>
 14           </plugin>
 15       </plugins>
 16   </build>
 17   
 18       <properties>
 19         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 20         <spring.version>4.1.4.RELEASE</spring.version>
 21         <hibernate.version>4.3.8.Final</hibernate.version>
 22     </properties>
 23     
 24   <dependencies>
 25       <!-- https://mvnrepository.com/artifact/javax.persistence/persistence-api -->
 26     <dependency>
 27         <groupId>javax.persistence</groupId>
 28         <artifactId>persistence-api</artifactId>
 29         <version>1.0</version>
 30     </dependency>
 31       <!-- 進行加密操作 -->
 32         <dependency>
 33             <groupId>commons-codec</groupId>
 34             <artifactId>commons-codec</artifactId>
 35             <version>1.10</version>
 36         </dependency>
 37           
 38           <!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
 39         <dependency>
 40             <groupId>dom4j</groupId>
 41             <artifactId>dom4j</artifactId>
 42             <version>1.6.1</version>
 43         </dependency>
 44 
 45           
 46       <!-- 微信開發工具包 -->
 47         
 48         <!-- https://mvnrepository.com/artifact/com.github.binarywang/weixin-java-common -->
 49         <dependency>
 50             <groupId>com.github.binarywang</groupId>
 51             <artifactId>weixin-java-common</artifactId>
 52             <version>2.2.0</version>
 53         </dependency>
 54         <!-- https://mvnrepository.com/artifact/com.github.binarywang/weixin-java-mp -->
 55         <dependency>
 56             <groupId>com.github.binarywang</groupId>
 57             <artifactId>weixin-java-mp</artifactId>
 58             <version>2.2.0</version>
 59         </dependency>
 60         
 61         
 62         <!-- junit -->
 63         <dependency>
 64             <groupId>junit</groupId>
 65             <artifactId>junit</artifactId>
 66             <version>4.12</version>
 67             <scope>test</scope>
 68         </dependency>
 69 
 70         <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
 71         <dependency>
 72             <groupId>com.github.pagehelper</groupId>
 73             <artifactId>pagehelper</artifactId>
 74             <version>4.1.4</version>
 75         </dependency>
 76         
 77         <!-- spring -->
 78         <dependency>
 79             <groupId>org.springframework</groupId>
 80             <artifactId>spring-core</artifactId>
 81             <version>${spring.version}</version>
 82         </dependency>
 83 
 84         <dependency>
 85             <groupId>org.springframework</groupId>
 86             <artifactId>spring-beans</artifactId>
 87             <version>${spring.version}</version>
 88         </dependency>
 89 
 90         <dependency>
 91             <groupId>org.springframework</groupId>
 92             <artifactId>spring-context</artifactId>
 93             <version>${spring.version}</version>
 94         </dependency>
 95 
 96         <dependency>
 97             <groupId>org.springframework</groupId>
 98             <artifactId>spring-tx</artifactId>
 99             <version>${spring.version}</version>
100         </dependency>
101 
102         <dependency>
103             <groupId>org.springframework</groupId>
104             <artifactId>spring-web</artifactId>
105             <version>${spring.version}</version>
106         </dependency>
107 
108         <dependency>
109             <groupId>org.springframework</groupId>
110             <artifactId>spring-test</artifactId>
111             <version>${spring.version}</version>
112             <scope>test</scope>
113         </dependency>
114 
115         <!-- 使用SpringMVC需配置 -->
116         <dependency>
117             <groupId>org.springframework</groupId>
118             <artifactId>spring-webmvc</artifactId>
119             <version>${spring.version}</version>
120         </dependency>
121         <!-- spring cglib 代理 -->
122         <dependency>
123             <groupId>cglib</groupId>
124             <artifactId>cglib</artifactId>
125             <version>2.2.2</version>
126         </dependency>
127         <!-- 關系型數據庫整合時需配置 如hibernate jpa等 -->
128         <dependency>
129             <groupId>org.springframework</groupId>
130             <artifactId>spring-orm</artifactId>
131             <version>${spring.version}</version>
132         </dependency>
133 
134         <!-- hibernate -->
135         <dependency>
136             <groupId>org.hibernate</groupId>
137             <artifactId>hibernate-core</artifactId>
138             <version>${hibernate.version}</version>
139         </dependency>
140 
141         <dependency>
142             <groupId>org.hibernate</groupId>
143             <artifactId>hibernate-ehcache</artifactId>
144             <version>${hibernate.version}</version>
145         </dependency>
146 
147         <!-- 二級緩存ehcache -->
148         <dependency>
149             <groupId>net.sf.ehcache</groupId>
150             <artifactId>ehcache</artifactId>
151             <version>2.9.0</version>
152         </dependency>
153 
154         <!-- log4j -->
155         <dependency>
156             <groupId>log4j</groupId>
157             <artifactId>log4j</artifactId>
158             <version>1.2.17</version>
159         </dependency>
160 
161         <!-- mysql連接 -->
162         <dependency>
163             <groupId>mysql</groupId>
164             <artifactId>mysql-connector-java</artifactId>
165             <version>5.1.34</version>
166         </dependency>
167 
168         <!-- c3p0數據源 -->
169         <dependency>
170             <groupId>com.mchange</groupId>
171             <artifactId>c3p0</artifactId>
172             <version>0.9.5-pre10</version>
173         </dependency>
174 
175         <!-- json -->
176 
177         <!-- 1號 -->
178         <dependency>
179             <groupId>com.fasterxml.jackson.core</groupId>
180             <artifactId>jackson-core</artifactId>
181             <version>2.8.1</version>
182         </dependency>
183         <!-- 2號 -->
184         <dependency>
185             <groupId>com.fasterxml.jackson.core</groupId>
186             <artifactId>jackson-annotations</artifactId>
187             <version>2.8.1</version>
188         </dependency>
189 
190         <!-- 3號 -->
191         <dependency>
192             <groupId>com.fasterxml.jackson.core</groupId>
193             <artifactId>jackson-databind</artifactId>
194             <version>2.8.1</version>
195             <exclusions>
196                 <exclusion>
197                     <artifactId>jackson-core</artifactId>
198                     <groupId>com.fasterxml.jackson.core</groupId>
199                 </exclusion>
200                 <exclusion>
201                     <artifactId>jackson-annotations</artifactId>
202                     <groupId>com.fasterxml.jackson.core</groupId>
203                 </exclusion>
204             </exclusions>
205         </dependency>
206 
207         <!-- 4號 -->
208         <dependency>
209             <groupId>com.google.code.gson</groupId>
210             <artifactId>gson</artifactId>
211             <version>2.7</version>
212         </dependency>
213         <!-- 5號 -->
214         <dependency>
215             <groupId>net.sf.json-lib</groupId>
216             <artifactId>json-lib</artifactId>
217             <version>2.4</version>
218             <classifier>jdk15</classifier>
219         </dependency>
220         <!-- 5號json-lib還需要以下依賴包 -->
221         <dependency>
222             <groupId>commons-lang</groupId>
223             <artifactId>commons-lang</artifactId>
224             <version>2.5</version>
225         </dependency>
226         <dependency>
227             <groupId>commons-beanutils</groupId>
228             <artifactId>commons-beanutils</artifactId>
229             <version>1.9.2</version>
230         </dependency>
231         <dependency>
232             <groupId>commons-collections</groupId>
233             <artifactId>commons-collections</artifactId>
234             <version>3.2.1</version>
235         </dependency>
236         <dependency>
237             <groupId>commons-logging</groupId>
238             <artifactId>commons-logging</artifactId>
239             <version>1.2</version>
240         </dependency>
241         
242         <!-- aop -->
243         <dependency>
244             <groupId>org.aspectj</groupId>
245             <artifactId>aspectjweaver</artifactId>
246             <version>1.8.4</version>
247         </dependency>
248 
249         <!-- servlet -->
250         <dependency>
251             <groupId>javax.servlet</groupId>
252             <artifactId>servlet-api</artifactId>
253             <version>3.0-alpha-1</version>
254             <scope>provided</scope>
255         </dependency>
256 
257         <dependency>
258             <groupId>javax.servlet</groupId>
259             <artifactId>jstl</artifactId>
260             <version>1.2</version>
261         </dependency>
262         <!-- guava 集合的交並操作 -->        
263         <dependency>
264             <groupId>com.google.guava</groupId>
265             <artifactId>guava</artifactId>
266             <version>19.0</version>
267         </dependency>
268         <dependency>
269             <groupId>com.google.guava</groupId>
270             <artifactId>guava-collections</artifactId>
271             <version>r03</version>
272         </dependency>
273         
274         <!-- 文件上傳 -->
275         <dependency>
276             <groupId>commons-fileupload</groupId>
277             <artifactId>commons-fileupload</artifactId>
278             <version>1.3.1</version>
279         </dependency>
280 
281   </dependencies>
282 </project>
View Code

 2>服務器端代碼:

  CenterController.java  

  1 package com.sxd.controller;
  2 
  3 import java.io.IOException;
  4 import java.util.ArrayList;
  5 import java.util.List;
  6 import java.util.Map;
  7 
  8 import javax.servlet.http.HttpServletRequest;
  9 import javax.servlet.http.HttpServletResponse;
 10 
 11 import me.chanjar.weixin.common.api.WxConsts;
 12 import me.chanjar.weixin.common.bean.menu.WxMenu;
 13 import me.chanjar.weixin.common.bean.menu.WxMenuButton;
 14 import me.chanjar.weixin.common.exception.WxErrorException;
 15 import me.chanjar.weixin.common.session.WxSessionManager;
 16 import me.chanjar.weixin.mp.api.WxMpConfigStorage;
 17 import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
 18 import me.chanjar.weixin.mp.api.WxMpMessageHandler;
 19 import me.chanjar.weixin.mp.api.WxMpMessageRouter;
 20 import me.chanjar.weixin.mp.api.WxMpService;
 21 import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
 22 import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
 23 import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
 24 import me.chanjar.weixin.mp.bean.WxMpXmlOutTextMessage;
 25 
 26 import org.springframework.context.annotation.Lazy;
 27 import org.springframework.stereotype.Controller;
 28 import org.springframework.web.bind.annotation.RequestMapping;
 29 import org.springframework.web.bind.annotation.ResponseBody;
 30 
 31 import com.sxd.util.ButtonMenuUtils;
 32 import com.sxd.util.Dom4jUtils;
 33 import com.sxd.util.RuleManager;
 34 
 35 
 36 /**
 37  * 中央處理器  
 38  * 
 39  * @author Administrator
 40  *
 41  */
 42 @Controller
 43 @RequestMapping("centercontroller")
 44 public class CenterController {
 45     
 46       public WxMpInMemoryConfigStorage config;//微信基本配置信息+Access Token
 47       public static WxMpService wxMpService;    //微信API的Service
 48       public WxMpMessageRouter wxMpMessageRouter;//微信消息路由器
 49       public static String accessToken; 
 50       
 51       
 52     /**
 53      * 1.處理微信首次配置信息+創建按鈕   【首次創建后可以  注釋initWeiXin()方法 不用每次都執行】
 54      * 2.驗證接口配置信息 【如果過時重新獲取】
 55      * 3.消息轉發---中轉站   【每次微信端的信息都會從微信服務器轉發到這里,然后從這里轉發出去】
 56      * @param request
 57      * @param response
 58      * @return
 59      * @throws IOException
 60      * @throws WxErrorException
 61      */
 62     @RequestMapping("test")
 63     public String test1(HttpServletRequest request, HttpServletResponse response) throws IOException, WxErrorException{
 64         /**
 65          * 1.處理微信首次配置信息+創建按鈕
 66          */
 67 //        initWeiXin();
 68         /**
 69          * 2.驗證接口配置信息  如果過時重新獲取
 70          */
 71         String echostr = request.getParameter("echostr");
 72         if(echostr != null){
 73             return "forward:/tokenCheckController/tokenCheck.htmls";
 74         }
 75         
 76         /**
 77          * 3.消息轉發---中轉站  每次微信端的消息都會來到這里進行分發
 78          */
 79         WxMpXmlMessage message = WxMpXmlMessage.fromXml(request.getInputStream());
 80         String msgType = message.getMsgType();
 81         Dom4jUtils dom4El = new Dom4jUtils();
 82         String url = dom4El.msgDispather(msgType);
 83         if(url != null){
 84             request.setAttribute("message", message);
 85             return url;
 86         }
 87         
 88         response.getWriter().write("無法辨識消息類型!!");
 89         return null;
 90         
 91     }
 92     
 93     
 94     /**
 95      * 初始化 微信相關配置  並且創建按鈕
 96      * @throws WxErrorException 
 97      */
 98     public void initWeiXin() throws WxErrorException{
 99         config = new WxMpInMemoryConfigStorage();
100         config.setAppId("wx4848686e5bd4efce"); // 設置微信公眾號的appid
101         config.setSecret("fc37ce345b3612d615d4ead83f21bdff"); // 設置微信公眾號的app corpSecret
102         config.setToken("F0932398023"); // 設置微信公眾號的token
103 
104         wxMpService = new WxMpServiceImpl();
105         wxMpService.setWxMpConfigStorage(config);//創建自己的service
106         if(config.getAccessToken() == null){
107             accessToken =  wxMpService.getAccessToken(true);//手動刷新獲取了Access Token
108         }
109         //創建菜單按鈕
110         ButtonMenuUtils bm = new ButtonMenuUtils();
111         WxMenu menu =  bm.createButtonMenu();
112         wxMpService.getMenuService().menuCreate(menu);
113     }
114     
115 }
View Code

  TokenCheckController.java

 1 package com.sxd.util.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 
 8 import org.springframework.stereotype.Controller;
 9 import org.springframework.web.bind.annotation.RequestMapping;
10 import org.springframework.web.bind.annotation.ResponseBody;
11 
12 import com.sxd.util.TokenCheckUtils;
13 
14 @Controller
15 @RequestMapping("tokenCheckController")
16 public class TokenCheckController {
17 
18     @RequestMapping("tokenCheck")
19     public void tokenCheck(HttpServletRequest request,HttpServletResponse response) throws IOException{
20         String signature = request.getParameter("signature");
21         String timestamp = request.getParameter("timestamp");
22         String nonce = request.getParameter("nonce");
23         String echostr = request.getParameter("echostr");
24         
25         TokenCheckUtils tokenCheckUtils = new TokenCheckUtils();
26         echostr = tokenCheckUtils.tokenCheck(signature, timestamp, nonce, echostr);
27         
28         response.getWriter().write(echostr);
29     }
30 }
View Code

  TokenCheckUtils.java

 1 package com.sxd.util;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.List;
 6 
 7 import org.apache.commons.codec.digest.DigestUtils;
 8 
 9 /**
10  * 驗證接口配置信息
11  * @author SXD
12  *
13  */
14 public class TokenCheckUtils {
15     
16     /**
17      * 驗證接口配置信息
18      * 加密/校驗流程如下:
19     1. 將token、timestamp、nonce三個參數進行字典序排序
20     2. 將三個參數字符串拼接成一個字符串進行sha1加密
21     3. 開發者獲得加密后的字符串可與signature對比,標識該請求來源於微信
22      */
23     public String tokenCheck(String signature,String timestamp,String nonce,String echostr){
24         String token = "F0932398023";
25         List<String> list = new ArrayList<>();
26         list.add(timestamp);
27         list.add(token);
28         list.add(nonce);
29         
30         Collections.sort(list);//1.字典排序
31         
32         String str = DigestUtils.sha1Hex(list.get(0)+list.get(1)+list.get(2));//2.sha1加密
33         if(signature.equals(str)){//3.判斷是否微信信息  此處判斷echostr!=null是為了進行下面的操作不影響此處原本的效果
34             return echostr;
35             //    也就是說 如果echostr!=null,那么此次的請求是在驗證是否成為開發者的;否則就是其他的微信請求,不用跳出程序
36         }
37         return null;
38     }
39 }
View Code

  msgTypeDispather.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <WxDispather>
 3     <WxMsgType type="text" url="forward:/textMsgController/msgDeal.htmls"></WxMsgType>
 4     <WxMsgType type="image" url="forward:/imageMsgController/msgDeal.htmls"></WxMsgType>
 5     <WxMsgType type="voice" url="forward:/voiceMsgController/msgDeal.htmls"></WxMsgType>
 6     <WxMsgType type="video" url="forward:/videoMsgController/msgDeal.htmls"></WxMsgType>
 7     <WxMsgType type="shortvideo" url="forward:/shortvideoMsgController/msgDeal.htmls"></WxMsgType>
 8     <WxMsgType type="location" url="forward:/locationMsgController/msgDeal.htmls"></WxMsgType>
 9     <WxMsgType type="link" url="forward:/linkMsgController/msgDeal.htmls"></WxMsgType>
10     <WxMsgType type="event" url="forward:/eventMsgController/msgDeal.htmls"></WxMsgType>
11     
12 </WxDispather>
View Code

  Dom4jUtils.java

 1 package com.sxd.util;
 2 
 3 import java.util.List;
 4 
 5 import org.dom4j.Document;
 6 import org.dom4j.DocumentException;
 7 import org.dom4j.Element;
 8 import org.dom4j.io.SAXReader;
 9 
10 import com.sxd.test.util.Dom4jTest;
11 
12 /**
13  * 根據微信端發送的消息,解析出消息類型,加載配置文件,根據消息類型,將消息轉發到對應
14  * 消息類型對應的Controller中進行響應處理
15  * @author SXD
16  *
17  */
18 public class Dom4jUtils {
19     
20     /**
21      * 使用dom4j解析消息類型配置文件,解析獲得的相對應的服務器端的地址,進行訪問
22      * @param msgType
23      * @return
24      */
25     public String msgDispather(String msgType){
26         SAXReader sReader = new SAXReader();
27         Document document;
28         try {
29             document = sReader.read(Dom4jUtils.class.getResourceAsStream("/msgTypeDispather.xml"));
30             List<Element> list =  document.getRootElement().elements();
31             for (Element element : list) {
32                 if(msgType.equals(element.attributeValue("type"))){
33                     return element.attributeValue("url");
34                 }
35             }
36         } catch (DocumentException e) {
37             e.printStackTrace();
38         }
39         return null;
40     }
41 }
View Code

  EventMsgController.java

 1 package com.sxd.message.controller;
 2 
 3 import java.util.stream.Stream;
 4 
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 
 8 import me.chanjar.weixin.common.exception.WxErrorException;
 9 import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
10 
11 import org.springframework.stereotype.Controller;
12 import org.springframework.web.bind.annotation.RequestMapping;
13 
14 import com.sxd.material.PermanentMaterialManager;
15 
16 /**
17  * event事件的服務端
18  * @author SXD
19  *
20  */
21 @Controller
22 @RequestMapping("eventMsgController")
23 public class EventMsgController {
24     
25     
26     @RequestMapping("msgDeal")
27     public void msgDeal(HttpServletRequest request, HttpServletResponse response) throws WxErrorException{
28         WxMpXmlMessage message = (WxMpXmlMessage) request.getAttribute("message");
29         //取消關注
30         if("unsubscribe".equals(message.getEvent())){
31             System.out.println("事件類型:"+message.getEvent());
32         }else if("subscribe".equals(message.getEvent())){//關注公眾號
33             System.out.println("事件類型:"+message.getEvent());
34         }else{    //按鈕點擊事件
35             System.out.println("按鈕的EventType:"+message.getEvent());
36             System.out.println("按鈕的buttonKey:"+message.getEventKey());
37         }
38     }
39 }
View Code

  TextMsgController.java

 1 package com.sxd.message.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 
 8 import me.chanjar.weixin.mp.api.WxMpService;
 9 
10 import org.springframework.stereotype.Controller;
11 import org.springframework.web.bind.annotation.RequestMapping;
12 
13 import com.sxd.controller.CenterController;
14 import com.sxd.util.RuleManager;
15 
16 /**
17  * Text文本類型消息的服務端
18  * @author SXD
19  *
20  */
21 @Controller
22 @RequestMapping("textMsgController")
23 public class TextMsgController {
24 
25     /**
26      * Text消息處理邏輯
27      * @throws IOException 
28      */
29     @RequestMapping("msgDeal")
30     public void msgDeal(HttpServletRequest request, HttpServletResponse response) throws IOException{
31         WxMpService  wxMpService = CenterController.wxMpService;
32         RuleManager rm = new RuleManager();
33         rm.dealRule(wxMpService, request, response);
34     }
35 }
View Code

  RuleManager.java

 1 package com.sxd.util;
 2 
 3 import java.io.IOException;
 4 import java.util.Map;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 import me.chanjar.weixin.common.api.WxConsts;
10 import me.chanjar.weixin.common.exception.WxErrorException;
11 import me.chanjar.weixin.common.session.WxSessionManager;
12 import me.chanjar.weixin.mp.api.WxMpMessageHandler;
13 import me.chanjar.weixin.mp.api.WxMpMessageRouter;
14 import me.chanjar.weixin.mp.api.WxMpService;
15 import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
16 import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
17 import me.chanjar.weixin.mp.bean.WxMpXmlOutTextMessage;
18 
19 public class RuleManager {
20     
21      /**
22      * 消息處理邏輯  
23      * Text消息處理規則
24      */
25     public void dealRule(WxMpService wxMpService,HttpServletRequest request, HttpServletResponse response) throws IOException{
26         
27         WxMpMessageHandler handlerText = new WxMpMessageHandler() {
28             
29             @Override
30             public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
31                     Map<String, Object> context, WxMpService wxMpService,
32                     WxSessionManager sessionManager) throws WxErrorException {
33                 
34                 WxMpXmlOutTextMessage outMessage = new WxMpXmlOutTextMessage();
35                 outMessage.setToUserName(wxMessage.getFromUser());
36                 outMessage.setFromUserName(wxMessage.getToUser());
37                 outMessage.setCreateTime(System.currentTimeMillis()/1000);
38                 outMessage.setContent("你發送的<"+wxMessage.getContent()+">是一首歌么");
39                 return outMessage;
40             }
41         };
42         WxMpMessageHandler handlerText2 = new WxMpMessageHandler() {
43             
44             @Override
45             public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
46                     Map<String, Object> context, WxMpService wxMpService,
47                     WxSessionManager sessionManager) throws WxErrorException {
48                 
49                 WxMpXmlOutTextMessage outMessage = new WxMpXmlOutTextMessage();
50                 outMessage.setToUserName(wxMessage.getFromUser());
51                 outMessage.setFromUserName(wxMessage.getToUser());
52                 outMessage.setCreateTime(System.currentTimeMillis()/1000);
53                 outMessage.setContent("第二個滿足了");
54                 return outMessage;
55             }
56         };
57         
58         
59         /**
60          * 消息處理規則,下面示例兩個並列的規則,粗細粒度
61          */
62         WxMpMessageRouter router = new WxMpMessageRouter(wxMpService);
63         router.rule()
64         .async(false)
65         .msgType(WxConsts.XML_MSG_TEXT)
66         .content("我")
67         .handler(handlerText)
68         .end()
69         .rule()
70         .async(false)
71         .msgType(WxConsts.XML_MSG_TEXT)
72         .rContent(".*(我|你|他).*")
73         .handler(handlerText2)
74         .end();
75         
76         WxMpXmlMessage message = (WxMpXmlMessage) request.getAttribute("message");
77         WxMpXmlOutMessage outMessage = router.route(message);
78         if(outMessage==null){
79             WxMpXmlOutTextMessage outMessageCopy = new WxMpXmlOutTextMessage();
80             outMessageCopy.setToUserName(message.getFromUser());
81             outMessageCopy.setFromUserName(message.getToUser());
82             outMessageCopy.setCreateTime(System.currentTimeMillis()/1000);
83             outMessageCopy.setContent(message.getContent());
84             response.getWriter().write(outMessageCopy.toXml());
85             return ;
86         }
87         response.getWriter().write(outMessage.toXml());
88     }
89 }
View Code

 

 

在這里,不僅驗證了服務器,也初始化了 自定義菜單,並且微信端的消息都進行了 分發!

3.服務器端代碼寫好后,啟動服務器,然后再回頭點擊微信公眾平台這里的提交按鈕【此處使用測試號】

 

提示提交成功后就知道配置成功與否了。

 
       


免責聲明!

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



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