国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ WeChat アプレット WeChatの開発 WeChat二次開発用のさまざまなタイプのメッセージのカプセル化

WeChat二次開発用のさまざまなタイプのメッセージのカプセル化

May 10, 2017 am 09:29 AM
java 微信

この記事では主に Java WeChat の二次開発の 3 番目の部分を詳しく紹介します。興味のある方は參考にしてください。この記事の例は Java を共有します。 WeChat でのさまざまな種類のメッセージのカプセル化は參考用です。具體的な內(nèi)容は次のとおりです


最初のステップ:

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:圖片的實(shí)體類
 */
public class Image {
 //圖片媒體ID
 private String MediaId;
 
 public String getMediaId() {
 return MediaId;
 }
 public void setMediaId(String mediaId) {
 MediaId = mediaId;
 }
}
を作成します

2 番目のステップ:

com .wtz.message.response パッケージを見つけて、新しいクラス ImageMes??sage.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:視頻的實(shí)體類
 */
public class Video {
 //視頻消息的媒體ID
 private String MediaId;
 //視頻消息的標(biāo)題
 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:語音消息實(shí)體類
 */
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:音樂消息實(shí)體類
 */
public class Music {
 //音樂標(biāo)題
 private String Title;
 //音樂描述
 private String Description;
 //音樂鏈接
 private String MusicUrl;
 //高品質(zhì)音樂鏈接
 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 パッケージを見つけて、新しいクラスを作成します.java

package com.wtz.message.response;

/**
 * @author wangtianze QQ:864620012
 * @date 2017年4月20日 上午10:05:29
 * <p>version:1.0</p>
 * <p>description:圖文實(shí)體類</p>
 */
public class Article {
 //圖文標(biāo)題
 private String Title;
 //圖文描述
 private String Description;
 //圖片鏈接,支持JPG,PNG格式,較好的效果為大圖
 private String PicUrl;
 //圖文消息跳轉(zhuǎn)鏈接
 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.response パッケージを見つけて、新しいクラスを作成します 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{
 //圖文條數(shù)
 private int ArticleCount;
 //多條圖文消息信息,默認(rèn)第一個(gè)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>站在服務(wù)器端的視角:接收信息</p>
 */
public class BaseMessage {
 //開發(fā)者微信號
 private String ToUserName;
 //發(fā)送方賬號(一個(gè)OpenId)
 private String FromUserName;
 //消息創(chuàng)建時(shí)間(整型)
 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{
 //消息內(nèi)容
 private String Content;

 public String getContent() {
 return Content;
 }

 public void setContent(String content) {
 Content = content;
 }
}

ステップ 13:

com.wtz.message.request パッケージを見つけて、作成します新しいクラス ImageMes??sage.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.request パッケージを見つけますを作成し、新しいクラス 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;
 //地理位置經(jīng)度
 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 {
 //消息標(biāo)題
 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.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:基礎(chǔ)事件消息類</p>
 */
public class BaseEventMessage {
 //開發(fā)者微信號
 private String ToUserName;
 //發(fā)送方賬號(一個(gè)OpenID)
 private String FromUserName;
 //消息創(chuàng)建時(shí)間(整型)
 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:掃描帶參數(shù)二維碼事件類</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:關(guān)注/取消關(guān)注事件類</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值對應(yīng)
 private String EventKey;

 public String getEventKey() {
 return EventKey;
 }

 public void setEventKey(String eventKey) {
 EventKey = eventKey;
 }
}

を作成します。 ステップ 22:

パッケージ com.wtz.message イベントを見つけ、新しいクラス 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:上報(bào)地理位置事件類</p>
 */
public class LocationEventMessage extends BaseEventMessage{
 //地理位置緯度
 private String Latitude;
 //地理位置經(jīng)度
 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(用戶已關(guān)注時(shí)的掃描帶參數(shù)的二維碼)
 public static final String EVENT_TYPE_SCAN = "scan";
 //事件類型:LOCATION(上報(bào)地理位置)
 public static final String EVENT_TYPE_LOCATION = "LOCATION";
 //事件類型:CLICK(自定義菜單)
 public static final String EVENT_TYPE_CLICK = "CLICK";
 
 //---------------------------------------------------------------
 
 //響應(yīng)消息類型:文本
 public static final String RESP_MESSAGE_TYPE_TEXT = "text";
 //響應(yīng)詳細(xì)類型:圖片
 public static final String RESP_MESSAGE_TYPE_IMAGE = "image";
 //響應(yīng)消息類型:語音
 public static final String RESP_MESSAGE_TYPE_VOICE = "voice";
 //響應(yīng)消息類型:視頻
 public static final String RESP_MESSAGE_TYPE_VIDEO = "video";
 //響應(yīng)詳細(xì)類型:音樂
 public static final String RESP_MESSAGE_TYPE_MUSIC = "music";
 //響應(yīng)消息類型:圖文
 public static final String RESP_MESSAGE_TYPE_NEWS = "news";
 
 //---------------------------------------------------------------
 
 //從流中解析出每個(gè)節(jié)點(diǎn)的內(nèi)容
 public static Map<String,String> parseXml(HttpServletRequest request) throws IOException{
 Map<String,String> map = new HashMap<String,String>();
 
 //從輸入流中獲取流對象
 InputStream in = request.getInputStream();
 
 //構(gòu)建SAX閱讀器對象
 SAXReader reader = new SAXReader();
 try {
  //從流中獲得文檔對象
  Document doc = reader.read(in);
  
  //獲得根節(jié)點(diǎn)
  Element root = doc.getRootElement();
  
  //獲取根節(jié)點(diǎn)下的所有子節(jié)點(diǎn)
  List<Element> children = root.elements();
  
  for(Element e:children){
  //遍歷每一個(gè)節(jié)點(diǎn),并按照節(jié)點(diǎn)名--節(jié)點(diǎn)值放入map中
  map.put(e.getName(), e.getText());
  System.out.println("用戶發(fā)送的消息XML解析為:" + e.getName() + e.getText());
  }
  
  //關(guān)閉流
  in.close();
  in = null;
 } catch (DocumentException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 
 return map;
 }
 
 /**
 * 用于擴(kuò)展節(jié)點(diǎn)數(shù)據(jù)按照<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);
   }
  }
  };
 }
 });
 
 /**
 * 將文本消息對象轉(zhuǎn)換成XML格式
 * params:textMessage 文本消息對象
 * return:xml
 */
 public static String messageToXml(TextMessage textMessage){
 xstream.alias("xml",textMessage.getClass());
 return xstream.toXML(textMessage);
 }
 
 /**
 * 將圖片消息對象轉(zhuǎn)換成XML格式
 * params:imageMessage
 * return:xml
 */
 public static String messageToXml(ImageMessage imageMessage){
 xstream.alias("xml", imageMessage.getClass());
 return xstream.toXML(imageMessage);
 }
 
 /**
 * 將語音消息對象轉(zhuǎn)換成XML格式
 * params:voiceMessage
 * return:xml
 */
 public static String messageToXml(VoiceMessage voiceMessage){
 xstream.alias("xml",voiceMessage.getClass());
 return xstream.toXML(voiceMessage);
 }
 
 /**
 * 將視頻消息對象轉(zhuǎn)換成XML格式
 * params:videoMessage
 * return:xml
 */
 public static String messageToXml(VideoMessage videoMessage){
 xstream.alias("xml",videoMessage.getClass());
 return xstream.toXML(videoMessage);
 }
 
 /**
 * 將音樂消息對象轉(zhuǎn)換成XML格式
 * params:musicMessage
 * return:xml
 */
 public static String messageToXml(MusicMessage musicMessage){
 xstream.alias("xml",musicMessage.getClass());
 return xstream.toXML(musicMessage);
 }
 
 /**
 * 將圖文消息對象轉(zhuǎn)換成XML格式
 * params:newsMessage
 * return:xml
 */
 public static String messageToXml(NewsMessage newsMessage){
 xstream.alias("xml",newsMessage.getClass());
 return xstream.toXML(newsMessage);
 }
}

Step 24:

パッケージ 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:核心服務(wù)類</p>
 */
public class ProcessService {
 public static String dealRequest(HttpServletRequest request){
 //XML格式的消息數(shù)據(jù)
 String respXml = "";
 //默認(rèn)返回的文本消息內(nèi)容
 String respContent = "未知的消息類型";
 //調(diào)用parseXml方法解析請求消息
 Map<String, String> requestMap;
 try {
  requestMap = MessageUtil.parseXml(request);
  //發(fā)送方賬號
  String fromUserName = requestMap.get("FromUserName");
  //開發(fā)者微信號
  String toUserName = requestMap.get("ToUserName");
  //消息類型
  String MsgType = requestMap.get("MsgType");
  
  //回復(fù)文本消息
  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 = "您發(fā)送的是文本消息";
  }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){
  respContent = "您發(fā)送的是圖片消息";
  }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)){
  respContent = "您發(fā)送的是語音消息";
  }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VIDEO)){
  respContent = "您發(fā)送的是視頻消息";
  }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)){
  respContent = "您發(fā)送的是地理位置消息";
  }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)){
  respContent = "您發(fā)送的是鏈接消息";
  }else if(MsgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)){
  //事件類型
  String eventType = requestMap.get("Event");
  if(eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)){
   respContent = "感謝您的關(guān)注";
  }else if(eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)){
   //TODO 取消訂閱后用戶不會(huì)再收到公眾號發(fā)送的消息,因此不需要回復(fù)
  }else if(eventType.equals(MessageUtil.EVENT_TYPE_SCAN)){
   //TODO 處理掃描帶參數(shù)二維碼事件
  }else if(eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)){
   //TODO 處理上報(bào)地理位置事件
  }else if(eventType.equals(MessageUtil.EVENT_TYPE_CLICK)){
   //TODO 處理菜單點(diǎn)擊事件
  }
  }
  //設(shè)置文本消息的內(nèi)容
  textMessage.setContent(respContent);
  //將文本消息對象轉(zhuǎn)換成xml
  respXml = MessageUtil.messageToXml(textMessage);
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 
 return respXml;
 }
}
それぞれ このタイプのメッセージのカプセル化が完了します。

【関連推奨事項(xiàng)】

1.

WeChatパブリックアカウントプラットフォームのソースコードダウンロード

2.

WeChat投票ソースコード

以上がWeChat二次開発用のさまざまなタイプのメッセージのカプセル化の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動(dòng)コミットモードをオフにし、次に複數(shù)の操作を?qū)g行し、結(jié)果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複數(shù)のSQL操作を?qū)g行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時(shí)に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設(shè)定して部分的なロールバックを達(dá)成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお?jiǎng)幛幛筏蓼埂?/p>

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

Garbage CollectionはJavaでどのように機(jī)能しますか? Garbage CollectionはJavaでどのように機(jī)能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動(dòng)的に管理するメカニズムであり、到達(dá)不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數(shù)、アクティブスレッド、靜的フィールドなど)、および到達(dá)不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達(dá)可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採用する:新世代(Eden、S0、S1)は頻繁にMinorGCを?qū)g行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを?qū)g行するのに時(shí)間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるU(xiǎn)RL、色、範(fàn)囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

説明された延期聲明の例で進(jìn)みます 説明された延期聲明の例で進(jìn)みます Aug 02, 2025 am 06:26 AM

Deferは、クリーニングリソースなど、関數(shù)が戻る前に指定された操作を?qū)g行するために使用されます。パラメーターは、延期時(shí)にすぐに評価され、関數(shù)は最後のファーストアウト(LIFO)の順に実行されます。 1.複數(shù)の債務(wù)は、宣言の逆の順序で実行されます。 2.ファイルの閉鎖などの安全なクリーニングに一般的に使用されます。 3。指定された返品値を変更できます。 4.回復(fù)に適したパニックが発生した場合でも実行されます。 5。リソースの漏れを防ぐために、ループで延期の亂用を避けます。正しい使用により、コードのセキュリティと読みやすさが向上します。

HTTPミドルウェアロギングの例を例に進(jìn)めます HTTPミドルウェアロギングの例を例に進(jìn)めます Aug 03, 2025 am 11:35 AM

GOのHTTPログミドルウェアは、リクエストメソッド、パス、クライアントIP、および時(shí)間がかかることを記録できます。 1. http.handlerfuncを使用してプロセッサをラップします。2。next.servehttpを呼び出す前後の開始時(shí)間と終了時(shí)間を記録します。完全なサンプルコードの実行が検証されており、中小のプロジェクトの開始に適しています。拡張機(jī)能の提案には、ステータスコードのキャプチャ、JSONログのサポート、リクエストIDトラッキングが含まれます。

Javaでオブザーバーパターンを使用する方法は? Javaでオブザーバーパターンを使用する方法は? Aug 02, 2025 am 11:52 AM

この質(zhì)問に対する明確な答えは、カスタムオブザーバーインターフェイスを使用してオブザーバーパターンを?qū)g裝するための推奨事項(xiàng)です。 1. Javaは観察可能なオブザーバーを提供していますが、前者はクラスであり、廃止されており、柔軟性がありません。 2。最新の推奨される実踐は、機(jī)能的なオブザーバーインターフェイスを定義することであり、被験者はオブザーバーリストを維持し、狀態(tài)が変更されたときにすべてのオブザーバーに通知することです。 3.ラムダ式と組み合わせて使用して、コードのシンプルさと保守性を向上させることができます。 4。GUIまたはJavabeanシナリオの場合、PropertyChangelistenerを使用できます。したがって、新しいプロジェクトはカスタムオブザーバーインターフェイススキームを採用する必要があります。カスタムオブザーバーインターフェイススキームは、タイプセーフでテストしやすく、現(xiàn)代のJavaを?qū)熼Tとしています

See all articles