/**
* Copyright (c) 2011-2014, James Zhan 詹波 ([email protected]).
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.jfinal.weixin.sdk.msg;
import java.util.ArrayList;
import java.util.List;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.jfinal.kit.LogKit;
import com.jfinal.kit.StrKit;
import com.jfinal.weixin.iot.msg.InEquDataMsg;
import com.jfinal.weixin.iot.msg.InEqubindEvent;
import com.jfinal.weixin.sdk.msg.in.InImageMsg;
import com.jfinal.weixin.sdk.msg.in.InLinkMsg;
import com.jfinal.weixin.sdk.msg.in.InLocationMsg;
import com.jfinal.weixin.sdk.msg.in.InMsg;
import com.jfinal.weixin.sdk.msg.in.InNotDefinedMsg;
import com.jfinal.weixin.sdk.msg.in.InShortVideoMsg;
import com.jfinal.weixin.sdk.msg.in.InTextMsg;
import com.jfinal.weixin.sdk.msg.in.InVideoMsg;
import com.jfinal.weixin.sdk.msg.in.InVoiceMsg;
import com.jfinal.weixin.sdk.msg.in.card.InCardPassCheckEvent;
import com.jfinal.weixin.sdk.msg.in.card.InCardPayOrderEvent;
import com.jfinal.weixin.sdk.msg.in.card.InCardSkuRemindEvent;
import com.jfinal.weixin.sdk.msg.in.card.InMerChantOrderEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUpdateMemberCardEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUserCardEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUserConsumeCardEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUserGetCardEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUserGiftingCardEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUserPayFromCardEvent;
import com.jfinal.weixin.sdk.msg.in.event.InCustomEvent;
import com.jfinal.weixin.sdk.msg.in.event.InFollowEvent;
import com.jfinal.weixin.sdk.msg.in.event.InLocationEvent;
import com.jfinal.weixin.sdk.msg.in.event.InMassEvent;
import com.jfinal.weixin.sdk.msg.in.event.InMenuEvent;
import com.jfinal.weixin.sdk.msg.in.event.InNotDefinedEvent;
import com.jfinal.weixin.sdk.msg.in.event.InPoiCheckNotifyEvent;
import com.jfinal.weixin.sdk.msg.in.event.InQrCodeEvent;
import com.jfinal.weixin.sdk.msg.in.event.InShakearoundUserShakeEvent;
import com.jfinal.weixin.sdk.msg.in.event.InShakearoundUserShakeEvent.AroundBeacon;
import com.jfinal.weixin.sdk.msg.in.event.InTemplateMsgEvent;
import com.jfinal.weixin.sdk.msg.in.event.InVerifyFailEvent;
import com.jfinal.weixin.sdk.msg.in.event.InVerifySuccessEvent;
import com.jfinal.weixin.sdk.msg.in.event.InWifiEvent;
import com.jfinal.weixin.sdk.msg.in.event.ScanCodeInfo;
import com.jfinal.weixin.sdk.msg.in.speech_recognition.InSpeechRecognitionResults;
import com.jfinal.weixin.sdk.utils.XmlHelper;
public class InMsgParser {
private InMsgParser() {}
/**
* 从 xml 中解析出各类消息与事件
* @param xml xml字符串
* @return {InMsg}
*/
public static InMsg parse(String xml) {
XmlHelper xmlHelper = XmlHelper.of(xml);
return doParse(xmlHelper);
}
/**
* 消息类型
* 1:text 文本消息
* 2:image 图片消息
* 3:voice 语音消息
* 4:video 视频消息
* shortvideo 小视频消息
* 5:location 地址位置消息
* 6:link 链接消息
* 7:event 事件
*/
private static InMsg doParse(XmlHelper xmlHelper) {
String toUserName = xmlHelper.getString("//ToUserName");
String fromUserName = xmlHelper.getString("//FromUserName");
Integer createTime = xmlHelper.getNumber("//CreateTime").intValue();
String msgType = xmlHelper.getString("//MsgType");
if ("text".equals(msgType))
return parseInTextMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("image".equals(msgType))
return parseInImageMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("voice".equals(msgType))
return parseInVoiceMsgAndInSpeechRecognitionResults(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("video".equals(msgType))
return parseInVideoMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("shortvideo".equals(msgType)) //支持小视频
return parseInShortVideoMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("location".equals(msgType))
return parseInLocationMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("link".equals(msgType))
return parseInLinkMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("event".equals(msgType))
return parseInEvent(xmlHelper, toUserName, fromUserName, createTime, msgType);
if (InEqubindEvent.DEVICE_EVENT.equals(msgType)) //微信硬件 绑定和解绑事件
return parseInDeviceEvent(xmlHelper, toUserName, fromUserName, createTime, msgType);
if (InEquDataMsg.DEVICE_TEXT.equals(msgType)) //微信硬件 接收数据
return parseInDeviceData(xmlHelper, toUserName, fromUserName, createTime, msgType);
LogKit.error("无法识别的消息类型 " + msgType + ",请查阅微信公众平台开发文档");
return parseInNotDefinedMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
}
private static InMsg parseInNotDefinedMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InNotDefinedMsg msg = new InNotDefinedMsg(toUserName, fromUserName, createTime, msgType);
msg.setXmlHelper(xmlHelper);
return msg;
}
private static InMsg parseInTextMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InTextMsg msg = new InTextMsg(toUserName, fromUserName, createTime, msgType);
msg.setContent(xmlHelper.getString("//Content"));
msg.setMsgId(xmlHelper.getString("//MsgId"));
return msg;
}
private static InMsg parseInImageMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InImageMsg msg = new InImageMsg(toUserName, fromUserName, createTime, msgType);
msg.setPicUrl(xmlHelper.getString("//PicUrl"));
msg.setMediaId(xmlHelper.getString("//MediaId"));
msg.setMsgId(xmlHelper.getString("//MsgId"));
return msg;
}
private static InMsg parseInVoiceMsgAndInSpeechRecognitionResults(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
String recognition = xmlHelper.getString("//Recognition");
String mediaId = xmlHelper.getString("//MediaId");
String format = xmlHelper.getString("//Format");
String msgId = xmlHelper.getString("//MsgId");
if (StrKit.isBlank(recognition)) {
InVoiceMsg msg = new InVoiceMsg(toUserName, fromUserName, createTime, msgType);
msg.setMediaId(mediaId);
msg.setFormat(format);
msg.setMsgId(msgId);
return msg;
} else {
InSpeechRecognitionResults msg = new InSpeechRecognitionResults(toUserName, fromUserName, createTime, msgType);
msg.setMediaId(mediaId);
msg.setFormat(format);
msg.setMsgId(msgId);
// 与 InVoiceMsg 唯一的不同之处
msg.setRecognition(recognition);
return msg;
}
}
private static InMsg parseInVideoMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InVideoMsg msg = new InVideoMsg(toUserName, fromUserName, createTime, msgType);
msg.setMediaId(xmlHelper.getString("//MediaId"));
msg.setThumbMediaId(xmlHelper.getString("//ThumbMediaId"));
msg.setMsgId(xmlHelper.getString("//MsgId"));
return msg;
}
private static InMsg parseInShortVideoMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InShortVideoMsg msg = new InShortVideoMsg(toUserName, fromUserName, createTi
没有合适的资源?快使用搜索试试~ 我知道了~
jfinal-jfinal-weixin-master.zip 基于maven jfinal 的微信公众号/小程序开发dem...

共678个文件
html:441个
java:206个
js:6个

需积分: 50 18 下载量 18 浏览量
2017-12-26
11:06:57
上传
评论
收藏 1.42MB ZIP 举报
温馨提示
jfinal-jfinal-weixin-master.zip 基于maven jfinal 的微信公众号/小程序开发demo
资源推荐
资源详情
资源评论




















收起资源包目录





































































































共 678 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论


未来会更好yes
- 粉丝: 38
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 大数据背景下国企管理思路创新.docx
- 软件设计方案师教程学习笔记(四).docx
- 区块链技术解析.docx
- 房建工程的项目管理与成本管理研究.docx
- 计算机与机械电子技术的融合发展思考.docx
- 互联网医保支付主要政策及行业发展进度分析报告.docx
- 商机直通车网络营销方案.doc
- 项目管理进度质量安全信息.doc
- 项目教学法在中职计算机教学中的运用研究.docx
- 大学设计PLC控制工业机械手.doc
- 热网换热站电热设备、工控机、网络外委维护范围及要求.doc
- 一种通用嵌入式控制平台的设计实现.docx
- 刍议责任会计应用于施工企业项目管理中的作用以及价值评析.docx
- 农村信息化建设背景下的乡村旅游电子商务推进模式.doc
- 计算机系统漏洞与安全防范技术研究.docx
- 网络技术应用选择题复习.ppt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
