Der vorherige Artikel fasste den ersten Teil der Entwicklung der öffentlichen WeChat-Plattform in der Java-Sprache zusammen – Umgebungsaufbau und Entwicklungszugriff. Dieser Artikel fasst den Empfang und die Antwort von Nachrichten zusammen.
Beim Herstellen einer Verbindung mit der öffentlichen WeChat-Plattform sendet WeChat eine Get-Anfrage an unsere Verifizierungsmethode. Wenn wir dann die Nachricht erhalten, sendet WeChat uns eine Post-Anfrage und sendet und empfängt Daten im XML-Format.
Sehen Sie sich die XML-Paketstruktur der gewöhnlichen Textnachricht an, die uns von WeChat gesendet wird:
> >
Nachdem Sie es verstanden haben, beginnen Sie mit der Eingabe des Codes:
1.
Konvertieren Sie das empfangene XML-Format in ein Sammlungsobjekt (Map)Erstellen Sie unter dem Util-Paket eine neue MessageUtil-Toolklasse:
Um das empfangene XML-Format in das Kartenformat zu konvertieren, ist ein JAR-Paket namens dom4j erforderlich. Und platzieren Sie es im lib-Paket unter Web-INF. Ich werde alle erforderlichen JAR-Pakete am Ende des Artikels einfügen. Mit Hilfe des dom4j-JAR-Pakets können wir eine Methode zum Konvertieren des XML-Formats in ein Map-Objektformat schreiben. Die Methode wird wie folgt implementiert: /**
* 新建方法,将接收到的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;
}
Natürlich müssen wir zunächst eine neue Entitätsklasse TextMessage erstellen, um das Nachrichtenobjekt zu übertragen Attribute in der Entitätsklasse entsprechen den oben an uns gesendeten WeChat-Nachrichten mit 6 Parametern des XML-Textes und stellen entsprechende Get/Set-Methoden und die Konstruktion leerer Parameter/vollständiger Parameter bereit, die hier nicht beschrieben werden:
private String ToUserName;//开发者微信号 private String FromUserName;//发送方账号 private Long CreateTime;//消息创建时间 private String MsgType;//消息类型 private String Content;//文本消息内容 private String MsgId;//消息id,64位整型
Als nächstes schreiben wir eine Methode zum Konvertieren dieses Textnachrichtenklassenobjekts, konvertieren es in das XML-Format und geben Folgendes zurück:
/** * 将文本消息对象转化成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. Nachdem wir die beiden oben genannten Verarbeitungsmethoden geschrieben haben, implementieren wir [Empfangen und Antworten auf Nachrichten],
Gehen Sie zurück zu unserem ursprünglichen Servlet und schreiben Sie in der doPost-Methode: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(); } }
Für das Projekt erforderliches Jar-Paket: Link: https://pan.baidu.com/s/1n7WXoDXN97AwQPjgiyz5gw Passwort: m5ne
Verwandte Empfehlungen:
Java-Grafikcode-Beispiel für die Entwicklung einer öffentlichen WeChat-PlattformDetaillierte Erläuterung des Beispiels für die Entwicklung öffentlicher WeChat-Kontozahlungen (Java)
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Schritte 2 des Java+WeChat-Entwicklungsprozesses für öffentliche Konten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!