• 【微信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.服务器端代码写好后,启动服务器,然后再回头点击微信公众平台这里的提交按钮【此处使用测试号】

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

    
    
  • 相关阅读:
    ActionBarSherlock的使用--------(一)配置
    宣布发布 Windows Azure ExpressRoute,宣告与 Level 3 建立全新的合作伙伴关系并推出关于其他 Azure 服务令人振奋的更新
    最佳实践:Windows Azure 网站 (WAWS)
    Strata 2014 上的 AzureCAT 粉笔会谈
    Windows Azure HDInsight 支持预览版 Hadoop 2.2 群集
    Windows Azure 网站上的 WordPress 3.8
    进一步探索:Windows Azure 网站中解锁的配置选项
    如何使用 Barracuda 防火墙设置/保护 Azure 应用程序
    Windows Azure 网站自愈
    宣布与 NBC 合作直播索契冬季奥运
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/5955378.html
Copyright © 2020-2023  润新知