AEAI WX微信扩展框架技术手册

网友投稿 815 2022-10-30

AEAI WX微信扩展框架技术手册

AEAI WX微信扩展框架技术手册

1 概述

2 预期读者

3 技能要求

4 名词介绍

5 总体介绍

5.1效果演示

5.2功能架构

AEAI WX的框架包括两个工程aeaiwx_core(java工程)、aeaiwx(java web工程),架构框图如下所示:

核心类库代码结构如下图所示:

各个Java类的具体用途,如下表所示:

包名

类名

用途

com.agileai.weixin.core

MessageBrokerServlet

接收、解析、转发消息

MessageEventHandler

具体处理消息

com.agileai.weixin.model

Constans

所有的常量定义集合

BaseMessage

消息父类

NewsMessage

新闻消息类,引用Article类

Article

文章实体类

TextMessage

文本消息类

com.agileai.weixin.tool

MessageBuilder

解析消息,反序列化消息

SecurityAuthHelper

处理OpenId,AccessToken等

MenuHelper

创建自定义菜单

LocationHelper

根据经纬度获取具体地理位置,使用到了百度OpenAPI

HttpClientManager

实例化HttpClient(SSL模式)等

5.3原理说明

5.4 产品特性

6 使用说明

6.1前置条件

6.2 嵌入方式

嵌入使用模式只需复制aeaiwx_core.jar包以及其所依赖的几个jar包到目标应用的WEB-INF/lib目录,对web.xml中进行相关修改设置,然后根据具体需求扩展MessageEvenHandler子类即可。

6.2.1  配置步骤

1.访问地址获取资源

访问​​Web应用是部署在云服务器上的。

2.相关配置说明

在目标Java应用的web.xml中添加servlet配置,如下图:

<servlet> 

         <servlet-name>MessageBroker</servlet-name> 

<servlet-class>com.agileai.weixin.core.MessageBrokerServlet</servlet-class>

         <init-param>

              <param-name>APPID</param-name>

              <param-value>Your  APPID</param-value>

         </init-param>

         <init-param>

              <param-name>APPSECRET</param-name>

              <param-value>Your  APPSECRET</param-value>

         </init-param>

         <init-param>

              <param-name>TOKEN</param-name>

              <param-value>Your Token</param-value>

         </init-param>

         <init-param>

              <param-name>BAIDU_KEY</param-name>

              <param-value>Your BaiDu appKey</param-value>

         </init-param>

         <init-param>

              <param-name>MessageEventHandlerClassName</param-name>

                <param-value>com.agileai.weixin.core.MessageEventHandler</param-value>

         </init-param>     

         <load-on-startup>1</load-on-startup>     

     </servlet>   

同时,在web.xml底部添加servlet-mapping设置,如下所示:

     <servlet-mapping>   

         <servlet-name>MessageBroker</servlet-name> 

          <url-pattern>/messagebroker</url-pattern> 

     </servlet-mapping>

6.2.2  扩展说明

com.agileai.weixin.core.MessageEventHandler是专门设计用于覆盖父类方法来完成特定需求,方法列表如下图所示:

下面一段代码是handleTextMessage样例方法:

    public String  handleTextMessage(Map<String, String> requestMap){

        String result = null;

        String content =  requestMap.get("Content");

       

        if (RecognizableText.contains(content)){

            String fromUserName =  requestMap.get("FromUserName");

            String toUserName =  requestMap.get("ToUserName");

            TextMessage textMessage  = new TextMessage();

            textMessage.setToUserName(fromUserName);

            textMessage.setFromUserName(toUserName);

            textMessage.setCreateTime(new Date().getTime());

            textMessage.setMsgType(ReqType.TEXT);

            textMessage.setFuncFlag(0);

            StringBuffer contentMsg  = new StringBuffer(); 

            contentMsg.append("亲,您的输入是").append(content); 

            textMessage.setContent(contentMsg.toString());

textMessageToXml(textMessage);

        }else{

            String fromUserName =  requestMap.get("FromUserName");

            String toUserName =  requestMap.get("ToUserName");

            TextMessage textMessage  = new TextMessage();

            textMessage.setToUserName(fromUserName);

            textMessage.setFromUserName(toUserName);

            textMessage.setCreateTime(new Date().getTime());

            textMessage.setMsgType(ReqType.TEXT);

            textMessage.setFuncFlag(0);

           

            StringBuffer contentMsg  = new StringBuffer(); 

            contentMsg.append("亲,您的输入不能被识别:)");   

 

            textMessage.setContent(contentMsg.toString());

textMessageToXml(textMessage);

        }

       

        return result;

    }

6.2.3  注意事项

6.3 独立方式

6.3.1  配置步骤

1.访问地址获取资源

访问​​class="data-table" data-id="t7a7e9d1-F2l14QZo" data-width="" style="outline: none; border-collapse: collapse; width: 100%;">

<servlet> 

         <servlet-name>MessageBroker</servlet-name> 

<servlet-class>com.agileai.weixin.core.MessageBrokerServlet</servlet-class>

         <init-param>

              <param-name>APPID</param-name>

              <param-value>Your  APPID</param-value>

         </init-param>

         <init-param>

              <param-name>APPSECRET</param-name>

              <param-value>Your  APPSECRET</param-value>

         </init-param>

         <init-param>

              <param-name>TOKEN</param-name>

              <param-value>Your Token</param-value>

         </init-param>

         <init-param>

              <param-name>BAIDU_KEY</param-name>

              <param-value>Your BaiDu appKey</param-value>

         </init-param>

         <init-param>

              <param-name>MessageEventHandlerClassName</param-name>

                <param-value>com.agileai.weixin.custom.BizMessageEventHandler</param-value>

         </init-param>     

         <load-on-startup>1</load-on-startup>     

     </servlet>

6.修改jdk路径

在Oracle官网-jdk,找到对应1.6.X的版本,安装之。也可参见如下地址:

​​class="data-table" data-id="t7a7e9d1-k19Vi1CX" data-width="" style="outline: none; border-collapse: collapse; width: 100%;">

名称

jsP页面

Handler控制器

工具面板

ServicePanel.jsp

ServicePanelHandler

我的位置

CurrentLocation.jsp

CurrentLocationHandler

热映电影

HotMovie.jsp

HotMovieHandler

天气预报

WeatherForecast.jsp

WeatherForecastHandler

周边搜索

AroundSearch.jsp

AroundResult.jsp

AroundSearchHandler

6.3.3  扩展说明

package com.agileai.weixin.custom;

 

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import  com.agileai.weixin.core.MessageEventHandler;

import  com.agileai.weixin.model.TextMessage;

import  com.agileai.weixin.model.Constans.ReqType;

import  com.agileai.weixin.tool.MessageBuilder;

 

publicclass BizMessageEventHandler extends  MessageEventHandler {

    protectedstatic List<String> RecognizableText = new ArrayList<String>();

   

    public BizMessageEventHandler(){

        if (RecognizableText.isEmpty()){

            RecognizableText.add("1");

            RecognizableText.add("2");

            RecognizableText.add("3");

            RecognizableText.add("4");

            RecognizableText.add("5");

        }

    }

   

    public String  handleSubscribe(Map<String, String> requestMap){

        String result = null;

       

        String fromUserName =  requestMap.get("FromUserName");

        String toUserName =  requestMap.get("ToUserName");

       

        TextMessage textMessage = new TextMessage();

        textMessage.setToUserName(fromUserName);

        textMessage.setFromUserName(toUserName);

        textMessage.setCreateTime(new Date().getTime());

        textMessage.setMsgType(ReqType.TEXT);

        textMessage.setFuncFlag(0);

       

        StringBuffer contentMsg = new StringBuffer(); 

        contentMsg.append("多谢关注!沈阳数通畅联软件技术有限公司是耕耘于软件集成领域的专业技术团队,以“分享SOA平台软件、传递敏捷集成机制”为使命,希望以自身所长,为客户和伙伴提供从数据层、服务层、应用层、流程层、交互层全方位的产品和技术解决方案。");

        contentMsg.append("欢迎访问<a href=\"data-id="p838747a-6wbEZ5qm">       

        textMessage.setContent(contentMsg.toString());

textMessageToXml(textMessage);

       

        return result;

    }  

   

    public String handleTextMessage(Map<String,  String> requestMap){

        String result = null;

        String content =  requestMap.get("Content");

       

        if (RecognizableText.contains(content)){

            String fromUserName =  requestMap.get("FromUserName");

            String toUserName =  requestMap.get("ToUserName");

            TextMessage textMessage = new TextMessage();

            textMessage.setToUserName(fromUserName);

            textMessage.setFromUserName(toUserName);

            textMessage.setCreateTime(new Date().getTime());

            textMessage.setMsgType(ReqType.TEXT);

            textMessage.setFuncFlag(0);

            StringBuffer contentMsg  = new StringBuffer(); 

            contentMsg.append("亲,您的输入是").append(content); 

            textMessage.setContent(contentMsg.toString());

textMessageToXml(textMessage);

        }else{

            String fromUserName =  requestMap.get("FromUserName");

            String toUserName =  requestMap.get("ToUserName");

            TextMessage textMessage  = new TextMessage();

            textMessage.setToUserName(fromUserName);

            textMessage.setFromUserName(toUserName);

            textMessage.setCreateTime(new Date().getTime());

            textMessage.setMsgType(ReqType.TEXT);

            textMessage.setFuncFlag(0);

           

            StringBuffer contentMsg  = new StringBuffer(); 

            contentMsg.append("亲,您的输入不能被识别:)"); 

 

            textMessage.setContent(contentMsg.toString());

textMessageToXml(textMessage);

        }

        return result;

    }

   

    public String  handleLocationEvent(Map<String, String> requestMap){

        String result = null;

 

        String openId =  requestMap.get("FromUserName");

        doubleparseDouble(requestMap.get("Latitude"));

        doubleparseDouble(requestMap.get("Longitude"));

        doubleparseDouble(requestMap.get("Precision"));

       

        HashMap<String,Object>  row = new HashMap<String,Object>();

        row.put("Latitude",latitude);

        row.put("Longitude",longitude);

        row.put("Precision",precision);

        row.put("receiveTime",new Date());

        LocationCache.put(openId, row);

       

        return result;

    }  

   

    public String  handleMenuClickEvent(String eventKey,Map<String, String> requestMap){

        String result = null;

       

        if ("MyWork".equals(eventKey)){

            String fromUserName =  requestMap.get("FromUserName");

            String toUserName =  requestMap.get("ToUserName");

            TextMessage textMessage  = new TextMessage();

            textMessage.setToUserName(fromUserName);

            textMessage.setFromUserName(toUserName);

            textMessage.setCreateTime(new Date().getTime());

            textMessage.setMsgType(ReqType.TEXT);

            textMessage.setFuncFlag(0);

           

            StringBuffer contentMsg  = new StringBuffer(); 

            contentMsg.append("我的工作包括所有该用户的工作相关功能,如:我的待办、我的待阅、我的信息、我的日程、我的客户、我的订阅等,目前正在集成中……").append("\n"); 

 

            textMessage.setContent(contentMsg.toString());

textMessageToXml(textMessage);

        }

        return result;

    }      

}

6.3.4  注意事项

7 后续感想

另外,在互联网各种开放资源平台也越来越多,国内BAT都提供一些高质量的OpenAPI(其实国外的OpenAPI资源更多,但由于网络原因不便使用),新浪、网易的新闻信息RSS也很不错,其他:如有道云笔记也提供了OpenAPI,这些互联网的开放资源都可以在应用中mashup聚合使用。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring整合redis的操作代码
下一篇:sumk-log- 基于 sumk 框架和 slf4j 标准的日志系统
相关文章

 发表评论

暂时没有评论,来抢沙发吧~