首頁 > Java > java教程 > 主體

Java+微信公眾號開發流程步驟詳解2

php是最好的语言
發布: 2018-08-10 14:50:34
原創
2673 人瀏覽過

上一篇文章總結了Java語言開發微信公眾平台的第一部分-環境搭建與開發接入,這篇總結訊息的接收與回應。

存取微信公眾平台的時候,微信將發送Get請求給我們的校驗方法。那麼當我們接收訊息的時候,微信將向我們發送Post請求,並以XML的格式發送與接收資料。

看一下微信發給我們的普通文字訊息的XML套件結構:

        

 

 1348831860# 1348831860/CCate>

 

 1234567890123456

 

官方文檔說明:

Java+微信公眾號開發流程步驟詳解2

了解之後,開始敲程式碼:

1.

將接收到的XML格式,轉為集合物件(Map)

在Util套件下,新建一個MessageUtil工具類別:

Java+微信公眾號開發流程步驟詳解2

將接收到的XML格式,轉換為Map格式需要一個叫做dom4j的jar套件。並將其放置在Web-INF下的lib包中,在文章的末尾我會放上所需的所有jar包。借助dom4j的jar包,我們可以寫方法,將XML格式,轉換對Map物件格式,方法實作如下:

/**
	 * 新建方法,将接收到的XML格式,转化为Map对象
	 * @param request 将request对象,通过参数传入
	 * @return 返回转换后的Map对象
	 */
	public static Map<String, String> xmlToMap(HttpServletRequest request) 
			throws IOException, DocumentException{
		Map<String, String> map = new HashMap<String, String>();
		//从dom4j的jar包中,拿到SAXReader对象。
		SAXReader reader = new SAXReader();
		InputStream is = request.getInputStream();//从request中,获取输入流
		Document doc =  reader.read(is);//从reader对象中,读取输入流
		Element root = doc.getRootElement();//获取XML文档的根元素
		List<Element> list = root.elements();//获得根元素下的所有子节点
		for (Element e : list) {
			map.put(e.getName(), e.getText());//遍历list对象,并将结果保存到集合中
		}
		is.close();
		return map;
	}
登入後複製

2、 

類似上述方法,我們需要寫方法,將我們的訊息對象,轉成XML。  

 此處,我們仍需藉助一個jar套件:xstream.jar,導入方式同dom4j。 (另說明一點,之前我導入的xstream是1.4的版本,回覆訊息總是缺少內容,於是在各種嘗試後將jar包版本換成1.3後回覆訊息成功,特此說明一下,具體原因暫時未知,將此坑告訴後面學習的人以防浪費時間)

當然,首先,我們需要新建一個實體類TextMessage,用於承載訊息對象,實體類別中6個屬性,分別對應上述微信給我們發送的XML文本的6個參數,並提供對應Get/Set方法以及空參/全參構造,此處不做贅述:

private String ToUserName;//开发者微信号
private String FromUserName;//发送方账号
private Long CreateTime;//消息创建时间
private String MsgType;//消息类型
private String Content;//文本消息内容
private String MsgId;//消息id,64位整型
登入後複製

  接下來,我們編寫方法,來轉換此文字訊息類別的對象,將其轉換為XML格式返回:

/**
* 将文本消息对象转化成XML格式
* @param message 文本消息对象
* @return 返回转换后的XML格式
*/
public static String textMessageToXml(TextMessage message){
	XStream xs = new XStream();
	//由于转换后xml根节点默认为class类,需转化为<xml>
	xs.alias("xml", message.getClass());
	return xs.toXML(message);
}
登入後複製

3、 

寫完上述兩個處理方法後,我們來實現【訊息的接收與回應】,

回到我們最開始的Servlet中,在doPost方法中進行編寫操作:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		try {
			//将request请求,传到Message工具类的转换方法中,返回接收到的Map对象
			Map<String, String> map = MessageUtil.xmlToMap(request);
			//从集合中,获取XML各个节点的内容
			String ToUserName = map.get("ToUserName");
			String FromUserName = map.get("FromUserName");
			String CreateTime = map.get("CreateTime");
			String MsgType = map.get("MsgType");
			String Content = map.get("Content");
			String MsgId = map.get("MsgId");
			if(MsgType.equals("text")){//判断消息类型是否是文本消息(text)
				TextMessage message = new TextMessage();
                //原来【接收消息用户】变为回复时【发送消息用户】
				message.setFromUserName(ToUserName);
				message.setToUserName(FromUserName);
				message.setMsgType("text");
				message.setCreateTime(new Date().getTime());//创建当前时间为消息时间
				message.setContent("您好,"+FromUserName+"\n我是:"+ToUserName
				+"\n您发送的消息类型为:"+MsgType+"\n您发送的时间为"+CreateTime
				+"\n我回复的时间为:"+message.getCreateTime()+"\n您发送的内容是:"+Content);
				//调用Message工具类,将对象转为XML字符串
                str = MessageUtil.textMessageToXml(message); 
				System.out.println(str);
				out.print(str);
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}finally{
			out.close();
		}
		} catch (DocumentException e) {
			e.printStackTrace();
		}finally{
			out.close();
		}
	}
登入後複製

這樣,我們就成功的完成了文字訊息的接收與回應。

Java+微信公眾號開發流程步驟詳解2

專案所需jar包:

連結:https://pan.baidu.com/s/1n7WXoDXN97AwQPjgiyz5gw 密碼:m5ne

相關推薦:

Java實作微信公眾平台開發的圖文程式碼實例

#微信公眾號支付開發(java)實例詳解

以上是Java+微信公眾號開發流程步驟詳解2的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板