実際には、メッセージが公共のアカウントのユーザーが送信され、メッセージは最初のマイクロチャネルプラットフォームを受信し、その後、マイクロチャネルプラットフォームを使用すると、URLアドレスでの開発のインターフェイスコンフィギュレーションモードで指定したメッセージに転送されます。
抽出した全てのメッセージのプッシュメッセージフィールドは、基底クラスにパッケージから定義されたパブリックフィールドを含むされる:作成時刻ToUserName(現像マイクロ信号)、fromusername(送信者口座番号、OPEN_ID)、CREATETIME(メッセージ)のMsgTypeグループクラスBaseMessage包装(メッセージタイプ)のMsgId(メッセージID)は、コードは以下のようにした後。
/**
* 请求消息基类(普通用户 -> 公众帐号)
* @author bym @date 2018年7月4日
*/
public class BaseMessage {
// 开发者微信号
private String ToUserName;
// 发送方帐号(一个OpenID)
private String FromUserName;
// 消息创建时间 (整型)
private long CreateTime;
// 消息类型
private String MsgType;
// 消息id,64位整型
private long MsgId;
public String getToUserName() {
return ToUserName;
}
public void setToUserName(String toUserName) {
ToUserName = toUserName;
}
public String getFromUserName() {
return FromUserName;
}
public void setFromUserName(String fromUserName) {
FromUserName = fromUserName;
}
public long getCreateTime() {
return CreateTime;
}
public void setCreateTime(long createTime) {
CreateTime = createTime;
}
public String getMsgType() {
return MsgType;
}
public void setMsgType(String msgType) {
MsgType = msgType;
}
public long getMsgId() {
return MsgId;
}
public void setMsgId(long msgId) {
MsgId = msgId;
}
}
请求消息之文本消息
/**
* 文本消息
* @author bym @date 2018年7月4日
*/
public class TextMessage extends BaseMessage {
// 消息内容
private String Content;
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
}
要求メッセージの写真は、メッセージです
/**
* 图片消息
* @author bym @date 2018年7月4日
*/
public class ImageMessage extends BaseMessage {
// 图片链接
private String PicUrl;
public String getPicUrl() {
return PicUrl;
}
public void setPicUrl(String picUrl) {
PicUrl = picUrl;
}
}
メッセージの場所要求メッセージ
/**
* 地理位置消息
* @author bym @date 2018年7月4日
*/
public class LocationMessage extends BaseMessage {
// 地理位置维度
private String Location_X;
// 地理位置经度
private String Location_Y;
// 地图缩放大小
private String Scale;
// 地理位置信息
private String Label;
public String getLocation_X() {
return Location_X;
}
public void setLocation_X(String location_X) {
Location_X = location_X;
}
public String getLocation_Y() {
return Location_Y;
}
public void setLocation_Y(String location_Y) {
Location_Y = location_Y;
}
public String getScale() {
return Scale;
}
public void setScale(String scale) {
Scale = scale;
}
public String getLabel() {
return Label;
}
public void setLabel(String label) {
Label = label;
}
}
リクエストリンクメッセージは、メッセージのあります
/**
* 链接消息
* @author bym @date 2018年7月4日
*/
public class LinkMessage extends BaseMessage {
// 消息标题
private String Title;
// 消息描述
private String Description;
// 消息链接
private String Url;
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
public String getUrl() {
return Url;
}
public void setUrl(String url) {
Url = url;
}
}
メッセージは、音声メッセージを要求します
/**
* 语音消息
* @author bym @date 2018年7月4日
*/
public class VoiceMessage extends BaseMessage {
// 媒体ID
private String MediaId;
// 语音格式
private String Format;
// 语音识别结果,UTF8编码
private String Recognition;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
public String getFormat() {
return Format;
}
public void setFormat(String format) {
Format = format;
}
public String getRecognition() {
return Recognition;
}
public void setRecognition(String recognition) {
Recognition = recognition;
}
}
ビデオメッセージ要求メッセージ
/**
* 视频消息
* @author bym @date 2018年7月4日
*/
public class VideoMessage extends BaseMessage {
// 视频消息媒体id
private String MediaId;
// 视频消息缩略图的媒体id
private String ThumbMediaId;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
public String getThumbMediaId() {
return ThumbMediaId;
}
public void setThumbMediaId(String thumbMediaId) {
ThumbMediaId = thumbMediaId;
}
}
応答メッセージの基底クラス
/**
* 消息基类(公众帐号 -> 普通用户)
* @author bym @date 2018年7月4日
*/
public class BaseMessage {
// 接收方帐号(收到的OpenID)
private String ToUserName;
// 开发者微信号
private String FromUserName;
// 消息创建时间 (整型)
private long CreateTime;
// 消息类型(text/music/news)
private String MsgType;
// 位0x0001被标志时,星标刚收到的消息
private int FuncFlag;
public String getToUserName() {
return ToUserName;
}
public void setToUserName(String toUserName) {
ToUserName = toUserName;
}
public String getFromUserName() {
return FromUserName;
}
public void setFromUserName(String fromUserName) {
FromUserName = fromUserName;
}
public long getCreateTime() {
return CreateTime;
}
public void setCreateTime(long createTime) {
CreateTime = createTime;
}
public String getMsgType() {
return MsgType;
}
public void setMsgType(String msgType) {
MsgType = msgType;
}
public int getFuncFlag() {
return FuncFlag;
}
public void setFuncFlag(int funcFlag) {
FuncFlag = funcFlag;
}
}
応答テキスト・メッセージ
/**
* 文本消息
* @author bym @date 2018年7月4日
*/
public class TextMessage extends BaseMessage {
// 回复的消息内容
private String Content;
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
}
写真応答メッセージ
/**
* 图片消息
* @author bym @date 2018年7月4日
*/
public class ImageMessage extends BaseMessage {
// 图片
private Image Image;
public Image getImage() {
return Image;
}
public void setImage(Image image) {
Image = image;
}
}
カスタムピクチャーメッセージImageクラス
/**
* 图片model
* @author bym @date 2018年7月4日
*/
public class Image {
// 媒体文件id
private String MediaId;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
}
写真応答メッセージ
/**
* 文本消息
* @@author bym @date 2018年7月4日
*/
public class NewsMessage extends BaseMessage {
// 图文消息个数,限制为10条以内
private int ArticleCount;
// 多条图文消息信息,默认第一个item为大图
private List<Article> Articles;
public int getArticleCount() {
return ArticleCount;
}
public void setArticleCount(int articleCount) {
ArticleCount = articleCount;
}
public List<Article> getArticles() {
return Articles;
}
public void setArticles(List<Article> articles) {
Articles = articles;
}
}
定義されたグラフィックメッセージクラスの記事
/**
* 图文model
* @author bym @date 2018年7月4日
*/
public class Article {
// 图文消息名称
private String Title;
// 图文消息描述
private String Description;
// 图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80
private String PicUrl;
// 点击图文消息跳转链接
private String Url;
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getDescription() {
return null == Description ? "" : Description;
}
public void setDescription(String description) {
Description = description;
}
public String getPicUrl() {
return null == PicUrl ? "" : PicUrl;
}
public void setPicUrl(String picUrl) {
PicUrl = picUrl;
}
public String getUrl() {
return null == Url ? "" : Url;
}
public void setUrl(String url) {
Url = url;
}
}
音声メッセージに応答して、
/**
* 语音消息
* @author bym @date 2018年7月4日
*/
public class VoiceMessage extends BaseMessage {
// 语音
private Voice Voice;
public Voice getVoice() {
return Voice;
}
public void setVoice(Voice voice) {
Voice = voice;
}
}
音声音声メッセージ定義されたクラス
/**
* 语音model
* @author bym @date 2018年7月4日
*/
public class Voice {
// 媒体文件id
private String MediaId;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
}
音楽ニュースに応答して、
/**
* 音乐消息
* @author bym @date 2018年7月4日
*/
public class MusicMessage extends BaseMessage {
// 音乐
private Music Music;
public Music getMusic() {
return Music;
}
public void setMusic(Music music) {
Music = music;
}
}
音楽音楽定義されたメッセージクラス
/**
* 音乐model
* @author bym @date 2018年7月4日
*/
public class Music {
// 音乐标题
private String Title;
// 音乐描述
private String Description;
// 音乐链接
private String MusicUrl;
// 高质量音乐链接,WIFI环境优先使用该链接播放音乐
private String HQMusicUrl;
// 缩略图的媒体id,通过上传多媒体文件得到的id
private String ThumbMediaId;
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
public String getMusicUrl() {
return MusicUrl;
}
public void setMusicUrl(String musicUrl) {
MusicUrl = musicUrl;
}
public String getHQMusicUrl() {
return HQMusicUrl;
}
public void setHQMusicUrl(String musicUrl) {
HQMusicUrl = musicUrl;
}
public String getThumbMediaId() {
return ThumbMediaId;
}
public void setThumbMediaId(String thumbMediaId) {
ThumbMediaId = thumbMediaId;
}
}
ビデオメッセージへの応答
/**
* 视频消息
* @author bym @date 2018年7月4日
*/
public class VideoMessage extends BaseMessage {
// 视频
private Video Video;
public Video getVideo() {
return Video;
}
public void setVideo(Video video) {
Video = video;
}
}
ビデオビデオメッセージは、クラスで定義されています
/**
* 视频model
* @author bym @date 2018年7月4日
*/
public class Video {
// 媒体文件id
private String MediaId;
// 缩略图的媒体id
private String ThumbMediaId;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
public String getThumbMediaId() {
return ThumbMediaId;
}
public void setThumbMediaId(String thumbMediaId) {
ThumbMediaId = thumbMediaId;
}
}
解決要求メッセージ
フロントのライトのdoGet doPostメソッドが書かれたとき、マイクロ手紙には、私たちにサーバーメソッドdoPostメソッドユーザー情報により送信されました。
すなわち、送信メッセージ、受信した応答メッセージを介して応答し、我々; doPostメソッドは、サーバーは、マイクロチャネル要求から送信されたメッセージを削除することができ、要求が全てコンテンツ関連要求をカプセル化し、2つのパラメータを有しています。
それは、要求にXML形式から私たちに送られたニュースサーバーマイクロ手紙を得た方法への要求メッセージを解釈する方法の質問です。次のようにここでは解析XMLのオープン・ソース・フレームワークのDOM4J手段(ここで使用されるが、DOM4J-1.6.1.jarである)、その後のHashMapに得られた分析結果は、メソッド解決要求メッセージです。
@SuppressWarnings("unchecked")
public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {
Map<String, String> map = new HashMap<String, String>();
InputStream inputStream = request.getInputStream();
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
Element root = document.getRootElement();
List<Element> elementList = root.elements();
for (Element e : elementList)
map.put(e.getName(), e.getText());
inputStream.close();
inputStream = null;
return map;
}
XMLに変換された応答メッセージを返します。
次のようにここでは、(ここで使用されるが、XStreamの-1.3.1.jarです)Javaクラスへの変換、オープンソースのフレームワークXStreamのXMLを使用して実装され、コードは次のとおりです。
private static XStream xstream = new XStream(new XppDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
boolean cdata = true;
public void startNode(String name, Class clazz) {
super.startNode(name, clazz);
}
protected void writeText(QuickWriter writer, String text) {
if (cdata) {
writer.write("<![CDATA[");
writer.write(text);
writer.write("]]>");
} else {
writer.write(text);
}
}
};
}
});
public static String messageToXml(TextMessage textMessage) {
xstream.alias("xml", textMessage.getClass());
return xstream.toXML(textMessage);
}
public static String messageToXml(ImageMessage imageMessage) {
xstream.alias("xml", imageMessage.getClass());
return xstream.toXML(imageMessage);
}
public static String messageToXml(VoiceMessage voiceMessage) {
xstream.alias("xml", voiceMessage.getClass());
return xstream.toXML(voiceMessage);
}
public static String messageToXml(VideoMessage videoMessage) {
xstream.alias("xml", videoMessage.getClass());
return xstream.toXML(videoMessage);
}
public static String messageToXml(MusicMessage musicMessage) {
xstream.alias("xml", musicMessage.getClass());
return xstream.toXML(musicMessage);
}
public static String messageToXml(NewsMessage newsMessage) {
XStream xstream = new XStream();
xstream.alias("xml", newsMessage.getClass());
xstream.alias("item", new Article().getClass());
return xstream.toXML(newsMessage);
}
}
なぜデータは、使用が何CDATA、XML CDATAに配置する必要がありますhttps://blog.csdn.net/u014401141/article/details/53453818
フレーム自体が生成XStreamのCDATAブロックをサポートしていないので、WRITETEXT方法が行われxtreamは、各要素の値XMLを生成する際に、支持CDATAブロックを追加するように拡張しました。
メッセージ処理ツールパッケージ
次のようにMessageUtilツールでパッケージ全体に関連するメッセージ処理方法は、完全なクラスコードがあります:
/**
*
* @author bym @date 2018年7月4日
*
*/
public class MessageUtil {
public static final String REQ_MESSAGE_TYPE_TEXT = "text";
public static final String REQ_MESSAGE_TYPE_IMAGE = "image";
public static final String REQ_MESSAGE_TYPE_VOICE = "voice";
public static final String REQ_MESSAGE_TYPE_VIDEO = "video";
public static final String REQ_MESSAGE_TYPE_LOCATION = "location";
public static final String REQ_MESSAGE_TYPE_LINK = "link";
public static final String REQ_MESSAGE_TYPE_EVENT = "event";
public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
public static final String EVENT_TYPE_SCAN = "scan";
public static final String EVENT_TYPE_LOCATION = "LOCATION";
public static final String EVENT_TYPE_CLICK = "CLICK";
public static final String RESP_MESSAGE_TYPE_TEXT = "text";
public static final String RESP_MESSAGE_TYPE_IMAGE = "image";
public static final String RESP_MESSAGE_TYPE_VOICE = "voice";
public static final String RESP_MESSAGE_TYPE_VIDEO = "video";
public static final String RESP_MESSAGE_TYPE_MUSIC = "music";
public static final String RESP_MESSAGE_TYPE_NEWS = "news";
@SuppressWarnings("unchecked")
public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {
Map<String, String> map = new HashMap<String, String>();
InputStream inputStream = request.getInputStream();
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
Element root = document.getRootElement();
List<Element> elementList = root.elements();
for (Element e : elementList)
map.put(e.getName(), e.getText());
inputStream.close();
inputStream = null;
return map;
}
private static XStream xstream = new XStream(new XppDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
boolean cdata = true;
public void startNode(String name, Class clazz) {
super.startNode(name, clazz);
}
protected void writeText(QuickWriter writer, String text) {
if (cdata) {
writer.write("<![CDATA[");
writer.write(text);
writer.write("]]>");
} else {
writer.write(text);
}
}
};
}
});
public static String messageToXml(TextMessage textMessage) {
xstream.alias("xml", textMessage.getClass());
return xstream.toXML(textMessage);
}
public static String messageToXml(ImageMessage imageMessage) {
xstream.alias("xml", imageMessage.getClass());
return xstream.toXML(imageMessage);
}
public static String messageToXml(VoiceMessage voiceMessage) {
xstream.alias("xml", voiceMessage.getClass());
return xstream.toXML(voiceMessage);
}
public static String messageToXml(VideoMessage videoMessage) {
xstream.alias("xml", videoMessage.getClass());
return xstream.toXML(videoMessage);
}
public static String messageToXml(MusicMessage musicMessage) {
xstream.alias("xml", musicMessage.getClass());
return xstream.toXML(musicMessage);
}
public static String messageToXml(NewsMessage newsMessage) {
XStream xstream = new XStream();
xstream.alias("xml", newsMessage.getClass());
xstream.alias("item", new Article().getClass());
return xstream.toXML(newsMessage);
}
}