/weixin-robot-java

微信公共平台机器人Java SDK

Primary LanguageJava

Weixin robot Java

微信公共平台自动回复机器人的Java SDK,你可以使用SDK简单快速构建微信机器人。 微信Robot Java借鉴了url rewrite的**,url rewrite是根据url进行路由,而微信Robot则是根据消息类型和内容进行路由。 整理的流程如下:

  • WexinRobotServlet负责认证和微信消息接收
  • 接收后进行XML解析,构建出 WeixinMessage对象,并注入到request的attribute中,名字为wxMsg
  • 根据配置的路由参数,对微信消息进行匹配
  • 根据匹配的结果进行URL路由转发
  • 最后由处理的组件完成xml格式反馈的输出

如何使用

首先我们要在pom.xml中添加:

 <dependency>
    <groupId>org.mvnsearch.wx</groupId>
    <artifactId>wx-robot-sdk</artifactId>
    <version>1.0.0</version>
 </dependency>

接下来就是修改web.xml添加Servlet负责接收微信公共平台发过来的消息:

    <servlet>
        <servlet-name>WexinRobotServlet</servlet-name>
        <servlet-class>org.mvnsearch.wx.servlet.WexinRobotServlet</servlet-class>
        <init-param>
            <param-name>token</param-name>
            <param-value>yourTokenHere</param-value>
        </init-param>
        <init-param>
            <param-name>confFile</param-name>
            <param-value>/WEB-INF/weixin-router.xml</param-value>
        </init-param>
    </servlet>

    <!-- weixing -->
    <servlet-mapping>
        <servlet-name>WexinRobotServlet</servlet-name>
        <url-pattern>/servlet/weixinrobot</url-pattern>
    </servlet-mapping>

其中token是指你在微信公共平台上的token,这里和其一致。接下来我们还需要设置servlet mapping,添加url-pattern, 然后将最终的url,如上述配置的 http://www.foobar.com/servlet/weixinrobot 作为微信公共平台接口配置中的URL。 接下来是在WEB-INF目录下创建一个weixin-router.xml的文件,完成信息的路由。

接收到的消息如何路由到指定的组件处理,如Struts的Controller等,这里我们需要创建一个router文件,这里还是根据 消息的类型和内容进行转发,内容如下:

<?xml version="1.0" encoding="utf-8"?>

<weixinrobot>

    <rule>
        <type>text</type>
        <content>[\d]{11}</content>
        <forward>/weixin2.wx</forward>
    </rule>

    <rule>
        <type>text</type>
        <forward>/weixin.wx</forward>
    </rule>

</weixinrobot>

上述的例子就是如果内容是手机号,交与/weixin2.wx这个URL处理。当然我们设置了一个默认的选项,如果text类型的消息没有任何 匹配,则由/weixin.wx处理。

收到微信消息后,要给出消息反馈。微信公共平台的消息反馈是一个xml格式的数据,在Java的系统中,我们使用jspx输出接口,样例如下:

 <?xml version="1.0" encoding="UTF-8"?>
 <xml>
     <ToUserName>${wxMsg.sender}</ToUserName>
     <FromUserName>${wxMsg.receiver}</FromUserName>
     <CreateTime>${wxMsg.createdTime}</CreateTime>
     <MsgType>text</MsgType>
     <Content>${content}</Content>
     <FuncFlag>0</FuncFlag>
 </xml>

编码

  • 在代码中获取解析好的微信消息 WeixinMessage wxMsg = (WeixinMessage)request.getAttribute("wxMsg");

FAQ

  • 如何调试: 由于微信服务器只能通知互联网IP和80端口,开发时你可以在你家中的ADSL拨号路由器上设置一下80转发, 然后微信服务器的消息通知就可以路由到你的笔记本上,方便你测试和开发。查看你的互联网Ip请访问 http://ip.mvnsearch.org
  • 参考样例清访问robot-demo Maven module