위챗 애플릿 위챗 개발 WeChat 보조 개발을 위한 다양한 유형의 메시지 캡슐화

WeChat 보조 개발을 위한 다양한 유형의 메시지 캡슐화

May 10, 2017 am 09:29 AM
java 위챗

이 기사는 주로 Java WeChat의 2차 개발의 세 번째 부분을 자세히 소개합니다. Java WeChat의 다양한 유형의 메시지 캡슐화에는 관심 있는 친구가 이 기사를 참조할 수 있습니다.

예제는 참고용으로 Java WeChat의 다양한 메시지 유형을 캡슐화합니다.

1단계: com.wtz.message.response 패키지를 찾아 생성합니다. 새 클래스 Image.java

package 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;
 }
}
로그인 후 복사

2단계:com.wtz.message.response 패키지를 찾아 새 클래스 ImageMessage.java 만들기

package 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;
 }
}
로그인 후 복사

단계 3 :com.wtz.message.response 패키지를 찾아 새 클래스 Video.java를 만듭니다

package 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;
 }
}
로그인 후 복사

4단계: com.wtz.message.response 패키지를 찾아 새 클래스 VideoMessage.java 만들기

package 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;
 }
}
로그인 후 복사

5단계: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;
 }
}
로그인 후 복사

6단계: 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;
 }
}
로그인 후 복사

7단계: 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;
 }
}
로그인 후 복사

8단계: com.wtz.message.response 패키지를 찾아 새 클래스 MusicMessage.java

package 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;
 }
}
로그인 후 복사

만들기 9단계: com.wtz .message.response 패키지를 찾고 새 클래스 Article.java를 만듭니다

package 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;
 }
}
로그인 후 복사

10단계: com.wtz.message를 찾습니다. 응답 패키지, 새 클래스 NewsMessage.java 생성

package 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;
 }
}
로그인 후 복사

11단계: 새 패키지 com.wtz.message.request, 새 클래스 BaseMessage.java

package 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;
 }
}
로그인 후 복사

12단계: com.wtz.message .request 패키지 찾기, 새 클래스 TextMessage.java 만들기

package 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;
 }
}
로그인 후 복사

13단계: com.wtz.message.request 패키지 찾기 , 새 클래스 ImageMessage.java 만들기

package 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;
 }
}
로그인 후 복사

14단계: com.wtz.message.request 패키지를 찾아 새 클래스 VoiceMessage.java

package 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;
 }
}
로그인 후 복사

< 만들기 🎜>15단계: com.wtz.message.요청 패키지를 찾고 새 클래스 VideoMessage.java 만들기

package 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;
 }
}
로그인 후 복사

16단계: com.wtz.message.request 찾기 패키지, 새 클래스 LocatonMessage.java 만들기

package 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;
 }
}
로그인 후 복사

17단계: com.wtz.message.request 패키지를 찾아 새 클래스 LinkMessage.java

package 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;
 }
}
로그인 후 복사

만들기

18단계: 새 패키지 com.wtz.message를 만들고, 새 클래스 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;
 }
}
로그인 후 복사

19단계: com.wtz 패키지 찾기 .message.event, 새 클래스 QRCodeEventMessage.java 만들기

package 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;
 } 
}
로그인 후 복사

20단계: com.wtz.message.event 패키지를 찾아 새 클래스 SubscribeEventMessage.java

package 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{
 
}
로그인 후 복사
만들기

21단계: com.wtz.message.event 패키지를 찾고, 새 클래스 MenuEventMessage.java를 만듭니다.

package 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;
 }
}
로그인 후 복사

22단계: com 패키지 찾기 .wtz.message.event, 새 클래스 LocationEventMessage.java 생성

package 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;
 }
}
로그인 후 복사

23단계: com.wtz.util 패키지에서 MessageUtil.java 클래스를 찾고 이 클래스를 수정하여 추가 요청 및 응답에 대한 다양한 메시지 유형 및 이벤트 유형을 추가하고 XML형식 메서드

package com.wtz.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XppDriver;
import com.wtz.message.response.ImageMessage;
import com.wtz.message.response.MusicMessage;
import com.wtz.message.response.NewsMessage;
import com.wtz.message.response.TextMessage;
import com.wtz.message.response.VideoMessage;
import com.wtz.message.response.VoiceMessage;

/**
 * @author wangtianze QQ:864620012
 * @date 2017年4月19日 下午3:29:58
 * <p>version:1.0</p>
 * <p>description:消息处理工具类</p>
 */
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";
 
 //---------------------------------------------------------------
 
 //事件类型:subscribe(订阅)
 public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
 //事件类型:unsubscribe(取消订阅)
 public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
 //事件类型:scan(用户已关注时的扫描带参数的二维码)
 public static final String EVENT_TYPE_SCAN = "scan";
 //事件类型:LOCATION(上报地理位置)
 public static final String EVENT_TYPE_LOCATION = "LOCATION";
 //事件类型:CLICK(自定义菜单)
 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";
 
 //---------------------------------------------------------------
 
 //从流中解析出每个节点的内容
 public static Map<String,String> parseXml(HttpServletRequest request) throws IOException{
 Map<String,String> map = new HashMap<String,String>();
 
 //从输入流中获取流对象
 InputStream in = request.getInputStream();
 
 //构建SAX阅读器对象
 SAXReader reader = new SAXReader();
 try {
  //从流中获得文档对象
  Document doc = reader.read(in);
  
  //获得根节点
  Element root = doc.getRootElement();
  
  //获取根节点下的所有子节点
  List<Element> children = root.elements();
  
  for(Element e:children){
  //遍历每一个节点,并按照节点名--节点值放入map中
  map.put(e.getName(), e.getText());
  System.out.println("用户发送的消息XML解析为:" + e.getName() + e.getText());
  }
  
  //关闭流
  in.close();
  in = null;
 } catch (DocumentException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 
 return map;
 }
 
 /**
 * 用于扩展节点数据按照<ToUserName><![CDATA[toUser]]></ToUserName>,中间加了CDATA段
 */
 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);
   }
  }
  };
 }
 });
 
 /**
 * 将文本消息对象转换成XML格式
 * params:textMessage 文本消息对象
 * return:xml
 */
 public static String messageToXml(TextMessage textMessage){
 xstream.alias("xml",textMessage.getClass());
 return xstream.toXML(textMessage);
 }
 
 /**
 * 将图片消息对象转换成XML格式
 * params:imageMessage
 * return:xml
 */
 public static String messageToXml(ImageMessage imageMessage){
 xstream.alias("xml", imageMessage.getClass());
 return xstream.toXML(imageMessage);
 }
 
 /**
 * 将语音消息对象转换成XML格式
 * params:voiceMessage
 * return:xml
 */
 public static String messageToXml(VoiceMessage voiceMessage){
 xstream.alias("xml",voiceMessage.getClass());
 return xstream.toXML(voiceMessage);
 }
 
 /**
 * 将视频消息对象转换成XML格式
 * params:videoMessage
 * return:xml
 */
 public static String messageToXml(VideoMessage videoMessage){
 xstream.alias("xml",videoMessage.getClass());
 return xstream.toXML(videoMessage);
 }
 
 /**
 * 将音乐消息对象转换成XML格式
 * params:musicMessage
 * return:xml
 */
 public static String messageToXml(MusicMessage musicMessage){
 xstream.alias("xml",musicMessage.getClass());
 return xstream.toXML(musicMessage);
 }
 
 /**
 * 将图文消息对象转换成XML格式
 * params:newsMessage
 * return:xml
 */
 public static String messageToXml(NewsMessage newsMessage){
 xstream.alias("xml",newsMessage.getClass());
 return xstream.toXML(newsMessage);
 }
}
로그인 후 복사

로 변환할 다양한 유형의 메시지를 추가합니다. 24단계: ProcessService.java 찾기 com.wtz.util 패키지 아래 클래스를 만들고 다양한 유형의 메시지에 응답하도록 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.

위챗 공개계정 플랫폼 소스코드 다운로드

2.위챗 투표 소스코드

위 내용은 WeChat 보조 개발을 위한 다양한 유형의 메시지 캡슐화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

회사의 보안 소프트웨어가 응용 프로그램이 실행되지 않습니까? 문제 해결 및 해결 방법은 무엇입니까? 회사의 보안 소프트웨어가 응용 프로그램이 실행되지 않습니까? 문제 해결 및 해결 방법은 무엇입니까? Apr 19, 2025 pm 04:51 PM

일부 애플리케이션이 제대로 작동하지 않는 회사의 보안 소프트웨어에 대한 문제 해결 및 솔루션. 많은 회사들이 내부 네트워크 보안을 보장하기 위해 보안 소프트웨어를 배포 할 것입니다. ...

통화 서클의 최신 뉴스 앱 순위 추천 (2025 년 권한 릴리스) 통화 서클의 최신 뉴스 앱 순위 추천 (2025 년 권한 릴리스) Apr 21, 2025 pm 09:33 PM

최고의 cryptocurrency 거래 및 분석 플랫폼은 다음과 같습니다. 1. OKX : 거래량에서 세계 1 위, 여러 거래를 지원하며 AI 시장 분석 및 온쇄 데이터 모니터링을 제공합니다. 2. BINANCE : 세계 최대의 교환으로, 심층적 인 시장 상황과 새로운 통화 최초 제안을 제공합니다. 3. 참깨 오픈 도어 : 스팟 트레이딩 및 OTC 채널로 알려진 자동 거래 전략을 제공합니다. 4. COINMARKETCAP : 20,000 개의 통화를 포함하는 권위있는 시장 데이터 플랫폼. 5. Coingecko : 커뮤니티 감정 분석으로 알려진 것은 Defi 및 NFT 추세 모니터링을 제공합니다. 6. 비소 계정 : 국내 시장 플랫폼, A- 공유와 통화 시장 간의 연계 분석을 제공합니다. 7. 온쇄 금융 : 블록 체인 뉴스에 중점을두고 매일 심층 보고서를 업데이트하십시오. 8. 골든 금융 : 24 작은

작곡가 : AI를 통한 PHP 개발 지원 작곡가 : AI를 통한 PHP 개발 지원 Apr 29, 2025 am 12:27 AM

AI는 작곡가 사용을 최적화하는 데 도움이 될 수 있습니다. 특정 방법에는 다음이 포함됩니다. 1. 종속성 관리 최적화 : AI는 종속성을 분석하고 최상의 버전 조합을 권장하며 충돌을 줄입니다. 2. 자동화 된 코드 생성 : AI는 모범 사례를 준수하는 composer.json 파일을 생성합니다. 3. 코드 품질 향상 : AI는 잠재적 인 문제를 감지하고 최적화 제안을 제공하며 코드 품질을 향상시킵니다. 이러한 방법은 기계 학습 및 자연어 처리 기술을 통해 구현되어 개발자가 효율성과 코드 품질을 향상시킬 수 있도록 도와줍니다.

Gate.io 참깨 도어 최신 공식 앱 주소 Gate.io 참깨 도어 최신 공식 앱 주소 Apr 22, 2025 pm 01:03 PM

공식 Gate.io 앱은 다음과 같은 방법으로 다운로드 할 수 있습니다. 1. 공식 웹 사이트 Gate.io를 방문하여 다운로드하십시오. 2. App Store 또는 Google Play에서 "Gate.io"를 검색하여 다운로드하십시오. 안전을 보장하려면 공식 채널을 통해 다운로드하십시오.

'플랫폼 독립성'은 Java의 맥락에서 무엇을 의미합니까? '플랫폼 독립성'은 Java의 맥락에서 무엇을 의미합니까? Apr 23, 2025 am 12:05 AM

Java의 플랫폼 독립성은 작성된 코드가 수정없이 JVM이 설치된 모든 플랫폼에서 실행될 수 있음을 의미합니다. 1) Java 소스 코드는 바이트 코드로 컴파일됩니다. 2) 바이트 코드는 JVM에 의해 해석되고 실행됩니다.

cryptocurrency 교환의 사기 루틴은 무엇입니까? cryptocurrency 교환의 사기 루틴은 무엇입니까? Apr 20, 2025 pm 05:06 PM

cryptocurrency 교환의 10 개의 사기 일반적인 사기 : 가짜 거래소, 폰지 캐피탈 거래, 계약 조작, 가짜 코인 피싱, 고객 서비스 사기 등 식별 지점 : 규제 라이센스 확인, 계약 주소 확인 및 고수익 약속 조심 보호해야합니다. 주류 거래소 만 사용하십시오 (Binance/Coinbase) 하드웨어 지갑을 활성화합니다 공유 개인 키/확인 코드를 거부하십시오 사기 처리 : 즉시 스크린 샷을 찍고, 자산을 동결하고, 플랫폼을보고하고, 경찰에보고합니다. 핵심 원칙 : 암호/전송 요청은 사기입니다!

H5 : HTML5의 주요 개선 H5 : HTML5의 주요 개선 Apr 28, 2025 am 12:26 AM

HTML5는 5 가지 주요 개선 사항을 제공합니다. 1. 시맨틱 태그는 코드 선명도 및 SEO 효과를 향상시킵니다. 2. 멀티미디어 지원은 비디오 및 오디오 임베딩을 단순화합니다. 3. 형태 향상은 검증을 단순화한다. 4. 오프라인 및 로컬 스토리지는 사용자 경험을 향상시킵니다. 5. 캔버스 및 그래픽 기능은 웹 페이지의 시각화를 향상시킵니다.

Java의 매개 변수 QR 코드로 WeChat 애플릿을 올바르게 생성하고 표시하는 방법은 무엇입니까? Java의 매개 변수 QR 코드로 WeChat 애플릿을 올바르게 생성하고 표시하는 방법은 무엇입니까? Apr 19, 2025 pm 04:48 PM

Java의 매개 변수로 WeChat 애플릿 QR 코드를 생성하고 HTML 페이지에 표시하는 것이 일반적인 요구 사항입니다. 이 기사는 J ... 사용 방법에 대해 자세히 논의 할 것입니다.

See all articles