この記事では主に Java WeChat の二次開発の 3 番目の部分を詳しく紹介します。興味のある方は参考にしてください。この記事の例は Java を共有します。 WeChat でのさまざまな種類のメッセージのカプセル化は参考用です。具体的な内容は次のとおりです
com.wtz.message.response パッケージを見つけて、新しいクラス Image.javapackage com.wtz.message.response;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午8:38:37
* version:1.0
* description:图片的实体类
*/
public class Image {
//图片媒体ID
private String MediaId;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
}
com .wtz.message.response パッケージを見つけて、新しいクラス ImageMessage.javapackage com.wtz.message.response;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午8:49:57
* version:1.0
* description:图片消息类
*/
public class ImageMessage extends BaseMessage {
//图片对象
private Image image;
public Image getImage() {
return image;
}
public void setImage(Image image) {
this.image = image;
}
}
com.wtz.message.response パッケージを見つけて、新しいクラス Video.javapackage com.wtz.message.response;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午9:02:14
* version:1.0
* description:视频的实体类
*/
public class Video {
//视频消息的媒体ID
private String MediaId;
//视频消息的标题
private String Title;
//视频消息的描述
private String Description;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
}
com.wtz .message.response パッケージを見つけて、新しいクラス VideoMessage.javapackage com.wtz.message.response;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午9:10:14
* version:1.0
* description:视频消息类
*/
public class VideoMessage extends BaseMessage{
//视频对象
private Video video;
public Video getVideo() {
return video;
}
public void setVideo(Video video) {
this.video = video;
}
}
com.wtz.message.response パッケージを見つけて、新しいクラス Voice.java を作成します package com.wtz.message.response;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午9:21:47
* version:1.0
* description:语音消息实体类
*/
public class Voice {
//语音媒体编号
private String MediaId;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
}
com.wtz.message .response パッケージを見つけて、新しいクラス VoiceMessage.java を作成しますpackage com.wtz.message.response;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午9:44:58
* version:1.0</p>
* description:语音消息类
*/
public class VoiceMessage extends BaseMessage{
//语音对象
private Voice voice;
public Voice getVoice() {
return voice;
}
public void setVoice(Voice voice) {
this.voice = voice;
}
}
com.wtz.message.response パッケージを見つけて、新しいクラス Music.java を作成しますpackage com.wtz.message.response;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午9:48:11
* version:1.0
* description:音乐消息实体类
*/
public class Music {
//音乐标题
private String Title;
//音乐描述
private String Description;
//音乐链接
private String MusicUrl;
//高品质音乐链接
private String HQMusicUrl;
//缩略图的媒体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 hQMusicUrl) {
HQMusicUrl = hQMusicUrl;
}
public String getThumbMediaId() {
return ThumbMediaId;
}
public void setThumbMediaId(String thumbMediaId) {
ThumbMediaId = thumbMediaId;
}
}
com.wtz.message.response パッケージを見つけて、新しいクラスを作成します。 MusicMessage.javapackage com.wtz.message.response;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午9:58:21
* <p>version:1.0</p>
* <p>description:音乐消息类</p>
*/
public class MusicMessage extends BaseMessage{
//音乐对象
private Music music;
public Music getMusic() {
return music;
}
public void setMusic(Music music) {
this.music = music;
}
}
com.wtz.message.response パッケージを見つけて、新しいクラスを作成します.javapackage com.wtz.message.response;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午10:05:29
* <p>version:1.0</p>
* <p>description:图文实体类</p>
*/
public class Article {
//图文标题
private String Title;
//图文描述
private String Description;
//图片链接,支持JPG,PNG格式,较好的效果为大图
private String PicUrl;
//图文消息跳转链接
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 getPicUrl() {
return PicUrl;
}
public void setPicUrl(String picUrl) {
PicUrl = picUrl;
}
public String getUrl() {
return Url;
}
public void setUrl(String url) {
Url = url;
}
}
com.wtz.message.response パッケージを見つけて、新しいクラスを作成します NewsMessage.javapackage com.wtz.message.response;
import java.util.List;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午10:16:22
* <p>version:1.0</p>
* <p>description:图文消息类</p>
*/
public class NewsMessage extends BaseMessage{
//图文条数
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;
}
}
新しいパッケージ com.wtz.message.request、新しいクラスを作成しますBaseMessage.javapackage com.wtz.message.request;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午10:53:23
* <p>version:1.0</p>
* <p>description:请求消息基类(普通用户->公众账号)</p>
* <p>站在服务器端的视角:接收信息</p>
*/
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;
}
}
com.wtz.message.request パッケージを見つけて、新しいクラスを作成します TextMessage.javapackage com.wtz.message.request;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午11:04:35
* <p>version:1.0</p>
* <p>description:文本消息</p>
*/
public class TextMessage extends BaseMessage{
//消息内容
private String Content;
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
}
com.wtz.message.request パッケージを見つけて、作成します新しいクラス ImageMessage.javapackage com.wtz.message.request;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午11:20:50
* <p>version:1.0</p>
* <p>description:图片消息</p>
*/
public class ImageMessage extends BaseMessage{
//图片链接
private String PicUrl;
//图片消息媒体ID
private String MediaId;
public String getPicUrl() {
return PicUrl;
}
public void setPicUrl(String picUrl) {
PicUrl = picUrl;
}
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
}
com.wtz.message.request パッケージを見つけて、新しいクラス VoiceMessage.javapackage com.wtz.message.request;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午11:27:40
* <p>version:1.0</p>
* <p>description:语音消息类</p>
*/
public class VoiceMessage extends BaseMessage {
//媒体ID
private String MediaId;
//语音格式
private String Format;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
public String getFormat() {
return Format;
}
public void setFormat(String format) {
Format = format;
}
}
com.wtz.message.request パッケージを見つけますを作成し、新しいクラス VideoMessage.javapackage com.wtz.message.request;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 下午3:28:03
* <p>version:1.0</p>
* <p>description:视频消息类</p>
*/
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;
}
}
com.wtz.message.request パッケージを見つけ、新しいクラス LocatonMessage.javapackage com.wtz.message.request;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 下午3:27:40
* <p>version:1.0</p>
* <p>description:地理位置消息类</p>
*/
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;
}
}
com.wtz.message を見つけます。 .request パッケージを作成し、新しいクラス LinkMessage.javapackage com.wtz.message.request;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 下午1:58:04
* <p>version:1.0</p>
* <p>description:链接消息类</p>
*/
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;
}
}
新しいパッケージ com.wtz.message.event、新しいクラス BaseEventMessage.java を作成しますpackage com.wtz.message.event;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 上午10:44:09
* <p>version:1.0</p>
* <p>description:基础事件消息类</p>
*/
public class BaseEventMessage {
//开发者微信号
private String ToUserName;
//发送方账号(一个OpenID)
private String FromUserName;
//消息创建时间(整型)
private long CreateTime;
//消息类型
private String MsgType;
//事件类型
private String Event;
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 String getEvent() {
return Event;
}
public void setEvent(String event) {
Event = event;
}
}
パッケージ com.wtz を見つけます.message.event を作成し、新しいクラス QRCodeEventMessage.javapackage com.wtz.message.event;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 下午3:24:30
* <p>version:1.0</p>
* <p>description:扫描带参数二维码事件类</p>
*/
public class QRCodeEventMessage extends BaseEventMessage{
//事件Key值
private String EventKey;
//用于换取二维码图片
private String Ticket;
public String getEventKey() {
return EventKey;
}
public void setEventKey(String eventKey) {
EventKey = eventKey;
}
public String getTicket() {
return Ticket;
}
public void setTicket(String ticket) {
Ticket = ticket;
}
}
パッケージを検索します。 com.wtz.message.event、新しいクラスを作成します。 SubscribeEventMessage.javapackage com.wtz.message.event;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 下午3:27:11
* <p>version:1.0</p>
* <p>description:关注/取消关注事件类</p>
*/
public class SubscribeEventMessage extends BaseEventMessage{
}
パッケージを検索します。 com.wtz.message.event を作成し、新しいクラス MenuEventMessage.javapackage com.wtz.message.event;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 下午3:32:42
* <p>version:1.0</p>
* <p>description:自定义菜单事件类</p>
*/
public class MenuEventMessage extends BaseEventMessage{
//事件Key值,与自定义菜单接口中Key值对应
private String EventKey;
public String getEventKey() {
return EventKey;
}
public void setEventKey(String eventKey) {
EventKey = eventKey;
}
}
パッケージ com.wtz.message イベントを見つけ、新しいクラス LocationEventMessage.javapackage com.wtz.message.event;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月20日 下午3:37:50
* <p>version:1.0</p>
* <p>description:上报地理位置事件类</p>
*/
public class LocationEventMessage extends BaseEventMessage{
//地理位置纬度
private String Latitude;
//地理位置经度
private String Longitude;
//地理位置精度
private String Precision;
public String getLatitude() {
return Latitude;
}
public void setLatitude(String latitude) {
Latitude = latitude;
}
public String getLongitude() {
return Longitude;
}
public void setLongitude(String longitude) {
Longitude = longitude;
}
public String getPrecision() {
return Precision;
}
public void setPrecision(String precision) {
Precision = precision;
}
}
パッケージ com.wtz.util の下で ProcessService.java クラスを見つけ、さまざまなタイプのメッセージに応答するように dealRequest メソッドを変更しますpackage com.wtz.util;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.wtz.message.response.TextMessage;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月19日 下午8:04:14
* <p>version:1.0</p>
* <p>description:核心服务类</p>
*/
public class ProcessService {
public static String dealRequest(HttpServletRequest request){
//XML格式的消息数据
String respXml = "";
//默认返回的文本消息内容
String respContent = "未知的消息类型";
//调用parseXml方法解析请求消息
Map<String, String> requestMap;
try {
requestMap = MessageUtil.parseXml(request);
//发送方账号
String fromUserName = requestMap.get("FromUserName");
//开发者微信号
String toUserName = requestMap.get("ToUserName");
//消息类型
String MsgType = requestMap.get("MsgType");
//回复文本消息
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(fromUserName);
textMessage.setFromUserName(toUserName);
textMessage.setCreateTime(new Date().getTime());
textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){
respContent = "您发送的是文本消息";
}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){
respContent = "您发送的是图片消息";
}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)){
respContent = "您发送的是语音消息";
}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)){
respContent = "您发送的是视频消息";
}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)){
respContent = "您发送的是地理位置消息";
}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)){
respContent = "您发送的是链接消息";
}else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)){
//事件类型
String eventType = requestMap.get("Event");
if(eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)){
respContent = "感谢您的关注";
}else if(eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)){
//TODO 取消订阅后用户不会再收到公众号发送的消息,因此不需要回复
}else if(eventType.equals(MessageUtil.EVENT_TYPE_SCAN)){
//TODO 处理扫描带参数二维码事件
}else if(eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)){
//TODO 处理上报地理位置事件
}else if(eventType.equals(MessageUtil.EVENT_TYPE_CLICK)){
//TODO 处理菜单点击事件
}
}
//设置文本消息的内容
textMessage.setContent(respContent);
//将文本消息对象转换成xml
respXml = MessageUtil.messageToXml(textMessage);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return respXml;
}
}
【関連推奨事項】
1.
WeChatパブリックアカウントプラットフォームのソースコードダウンロードWeChat投票ソースコード以上がWeChat二次開発用のさまざまなタイプのメッセージのカプセル化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。