原生 js 封装插件方法详解与实际案例分享
841
2022-10-30
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~