Java Wechat Public Platform Development News Management, Sie müssen zunächst die offiziellen Dokumente lesen
Das WeChat -Nachrichtenverwaltung wird unterteilt, um gewöhnliche Nachrichten zu empfangen, Ereignisse zu erhalten, Nachrichten zu senden (passive Antwort), Kundendienstnachrichten, Massennachrichten und Vorlagennachrichten.
1. Empfangen Sie gewöhnliche Nachrichten
Wenn ein gewöhnlicher WeChat -Benutzer eine Nachricht an ein öffentliches Konto sendet, verpackt der WeChat -Server das XML -Datenpaket der Postnachricht an die vom Entwickler ausgefüllte URL.
In Bezug auf MSGID entspricht die offizielle Erklärung jeder Nachrichten -ID. In Bezug auf das Wiederholungsnachrichtengewicht wird empfohlen, MSGID zur Warteschlange zu verwenden. Wenn der WeChat-Server innerhalb von fünf Sekunden keine Antwort erhält, wird eine Anfrage abgeschlossen und erneut initiiert und insgesamt dreimal wiederholt.
Zum Beispiel das XML -Beispiel der Textnachricht
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a Test]]> </content> <msgid> 1234567890123456 </msgid> </xml>
Überprüfen Sie andere Nachrichten im offiziellen Dokument und verkapseln Sie einfach die folgende Nachricht zur Abstract -Basisklasse.
Paket com.phil.wechat.msg.model.req; importieren java.io.serializable; / ** * Grundlegende Nachrichtenklasse * * @Author Phil * */ public Abstract Class AbstractMsg implementiert serialisierbar {private statische endgültige long serialversionuid = -6244277633057415731l; private String tousername; // Entwickler WeChat ID private String von susername; // Absenderkonto (OpenID) private String msgType = setMSGType (); // Nachrichtentyp, zum Beispiel/Text/Bild private long CreateTime; // Nachrichtenerstellung Zeit (Ganzzahl) Private Long Msgid; // Nachrichten-ID, 64-Bit Integer/ ** * Nachrichtentyp * * @return */ public abstract String setMSGType (); }Textnachricht textmsg.java
Paket com.phil.wechat.msg.model.req; / *** SMS* @Author Phil* @date 30. Juni 2017**/ Public Class TextMSG erweitert AbstractMSG {private statische endgültige lange Serialversionuid = -1764016801417503409L; private String -Inhalte; // Textnachricht @Override public String setMSGType () {return "text"; }}Andere sind so ...
2. Antworten Sie passiv auf Benutzernachrichten
Nachdem der WeChat -Server die Nachricht des Benutzers an die Developer Server -Adresse (im Entwicklerzentrum konfiguriert) des offiziellen Kontos gesendet hat, wird der WeChat -Server getrennt, wenn er die Antwort innerhalb von fünf Sekunden nicht erhält und erneut eine Anforderung einleitet und insgesamt dreimal probiert. Wenn beim Debuggen festgestellt wird, dass der Benutzer die Antwortmeldung nicht empfangen kann, können Sie überprüfen, ob die Meldung abgelaufen ist. Wenn der Server nicht garantieren kann, dass er innerhalb von fünf Sekunden verarbeitet und antwortet, kann er direkt auf die leere Zeichenfolge antworten. Der WeChat -Server wird dies nicht behandeln und keine Wiederholung einleiten.
Wenn "dieses offizielle Konto vorerst keine Dienste anbieten kann, versuchen Sie es später erneut", dann gibt es zwei Gründe dafür.
Zum Beispiel das Beispiel für die Antwort von Antwort Text XML
<xml> <tousername> <! [cdata [touser]]> </tousername> <fromusername> <! [cdata [fromuser]]> </fromUnername> <createTime> 12345678 </createtime> <msgType> <! [CDATA [Text]> </msgtype> </mtgtype> </mtgtype> </mtgtype> </mtgtype> </mtgtype <Content> <! [CDATA [Hallo]]> </content> </xml>
Im einfachen Paket
Antwortnachricht abstrakte Basisklassen Respabractmsg.java
Paket com.phil.wechat.msg.model.resp; importieren java.io.serializable; / ** * Nachrichtenbasisklasse (öffentlicher Konto-> gewöhnlicher Benutzer) * * @Author Phil * */ public abstract Class ResedRabRabractMsg {// Empfängerkonto (empfangene OpenID) private String tousername; // Entwickler WeChat ID private String von susername; // Nachrichtenerstellung Zeit (integral) privat langer Kreatterimer; // Nachrichtentyp (text/music/news) private String msgType = setmsgType (); // Nachrichtentyp public abstract String setMSGType (); } Antwort SMS -Nachricht respextmsg.java
Paket com.phil.wechat.msg.model.resp; / ** * Antwort auf Bildmeldungen * * @Author Phil * @Data 26. März 2017 * */ öffentliche Klasse Respimagemsg erweitert ResplabstractMsg {private Bildbild; @Override public String setMSGType () {return "Bild"; } / ** * * @Author Phil * @date 19. Juli 2017 * * / public class Image {// Multimedia -Dateien über die Schnittstelle in der Materialverwaltung hochladen, um die ID zu erhalten. private String mediaId; public String GetMediaId () {return MediaId; } public void setMediaId (String mediAd) {mediaId = mediaId; }}} Andere Nachrichtentypen sind wie folgt ...
A. Nachrichtenverarbeitung
Master XML Parsing
Paket com.phil.wechat.msg.controller; importieren java.io.ioException; importieren java.io.inputstream; import Java.util.map; import Java.util.objects; import org.apache.commons.lang3.stringutils; import org.dom4j.documentException; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.requestMethod; import com.phil.modules.config.wechatconfig; com.phil.modules.util.msgutil; import com.phil.modules.util.signatureUtil; import com.phil.modules.util.xmlutil; import com.phil.wechat.base.controller.basecontroller; import com.phil.wechat.base.result.wechatresult; import com.phil.wechat.msg.model.req.basicmsg; import com.phil.wechat.msg.model.resp.respabstractmsg; import com.phil.wechat.msg.model.resp.respnewsmsg; import com.phil.wechat.msg.model.resp.respnewsmsg; import com.phil.wechat.msg.service.wechatmsgservice; /** * @Author Phil * @date 19. September 2017 * */@controller @RequestMapPing ("/wechat") öffentliche Klasse WechatmsgController erweitert BaseConTroller {private logger logger = loggerfactory.getLogger (this.getClass (); @Autowired Private WeChatmsgService WeChatmsgService; /** * Überprüfen Sie, ob die Informationen vom WeChat-Server gesendet werden, und verarbeiten Sie die Meldung * @param out * @throws ioException */@RequestMapping (value = "/Handler", method = {RequestMethod.get, RequestMethod.Post}) öffentlich void processPost () Ausnahme {this.getRequest ().). this.getResponse (). setCharactercoding ("utf-8"); boolean isPost = Object.equals ("post", this.getRequest (). getMethod (). touppercase ()); if (isPost) {logger.debug ("Zugriff ist erfolgreich, Logik wird verarbeitet"); String respxml = defaultmsgDiSon (this.getRequest (). GetInputStream ()); // processRequest (Anfrage, Antwort); if (stringutils.isnotblank (respxml)) {this.getResponse (). getWriter (). Write (respxml); }} else {String signature = this.getRequest (). getParameter ("Signature"); // TIMESTAMP String Timestamp = this.getRequest (). GetParameter ("Timestamp"); // zufällige Zahl String nonce = this.getRequest (). GetParameter ("nonce"); // Überprüfen Sie die Anfrage, indem Sie die Signatur überprüfen. Wenn die Überprüfung erfolgreich ist, geben Sie Echostr so zurück, was darauf hinweist, dass der Zugang erfolgreich ist. Andernfalls schlägt der Zugriff fehl, wenn (SignatureUtil.Checksignature (Signature, Zeitstempel, Nonce)) {// Random String String echoStr = this.getRequest (). GetParameter ("echostr"); logger.debug ("erfolgreich, echostr {}", echostr); this.getResponse (). getWriter (). Write (echostr); }}} / ** * Standardverarbeitungsmethode * @param input * @return * @throws Exception * @throws documentException * / private String defaultmsgDiSPl (InputStream InputStream) löst die Ausnahme aus {String result = null; if (inputStream! if (params! String createTime = params.get ("createTime"); String msgid = params.get ("msgid"); msginfo.setCreateTime ((createTime! = null &&! ". msginfo.setfromusername (params.get ("fromusername")); msginfo.setMSGID ((msgid! = null &&! ". msginfo.settousername (params.get ("tousername")); WeChatResult resultObj = coreHandler (msginfo, params); if (resultObj == null) {// return null; } boolean success = resultObj.issuccess (); // Wenn wahr, bedeutet dies, dass die XML -Datei zurückgegeben wird und direkt konvertiert werden kann, ansonsten nach Typ if (Erfolg) {result = resultObj.getObject (). ToString (); } else {int type = resultObj.ettype (); // 1 Grafische Nachricht wird hier angegeben, ansonsten wird sie direkt konvertiert, wenn (type == wechatresult.newsmsg) {respNewsmsg newsmsg = (respNewsmsg) resultObj.getObject (); result = msgutil.newsmsgtoxml (NewsMSG); } else {resastRabractmsg Basicmsg = (ResetAbStractmsg) resultObj.getObject (); result = msgutil.msgtoxml (BasicMSG); }} else {result = "msg ist falsch"; }} Rückgabeergebnis; } / ** * Kernverarbeitung * * @param msg * Nachrichtenbasisklasse * @param Params * XML Parsed Data * @return * / private WeChatResult CoreHandler (BasicMSG msg, MAP <String> Params) {WeChatresult result = null; String msgType = params.get ("msgType"); if (stringutils.isempty (msgType)) {switch (msgType) {case wechatconfig.req_message_type_text: // Textnachricht Ergebnis = WechatmsgService.textmsg (msg, params); brechen; case WeChatConfig.req_message_type_image: // Bildmeldung Ergebnis = WechatmsgService.imagemsg (MSG, Params); brechen; case WeChatConfig.req_message_type_link: // link message result = wechatmsgservice.linkmsg (msg, params); brechen; case WeChatConfig.req_message_type_location: // Geografisches Standort Ergebnis = WeChatmsgService.locationmsg (MSG, Params); brechen; case WeChatConfig.req_message_type_voice: // Audio -Nachricht Ergebnis = WechatmsgService.voicemsg (MSG, Params); brechen; case WeChatConfig.req_message_type_shortvideo: // kurze Videomobiliennachricht Ergebnis = WeChatmsgService.shortvideo (MSG, Params); brechen; case WeChatConfig.req_message_type_video: // Videomobilienmeldung Ergebnis = WechatmsgService.shortvideo (MSG, Params); brechen; case WeChatConfig.req_message_type_video: // Videomobilienmeldung Ergebnis = WechatmsgService.videomsg (MSG, Params); brechen; case WeChatConfig.req_message_type_event: // Ereignismeldung String eventType = params.get ("Ereignis"); // if (eventType! = null &&! ". brechen; case WeChatConfig.event_type_unsubscribe: result = wechatmsgService.unsubscribe (msg, params); brechen; case WeChatConfig.event_type_scan: result = wechatmsgService.scan (msg, params); brechen; case WeChatConfig.event_type_location: result = wechatmsgService.eventLocation (msg, params); brechen; case WeChatConfig.event_type_click: result = wechatmsgService.eventClick (msg, params); brechen; case WeChatConfig.event_type_view: result = wechatmsgService.eventView (msg, params); brechen; case WeChatConfig.kf_create_Session: result = wechatmsgService.kfCreateesession (msg, params); brechen; case WeChatConfig.kf_close_Session: result = wechatmsgService.kfClosession (MSG, Params); brechen; case WeChatConfig.kf_close_Session: result = wechatmsgService.kfClosession (MSG, Params); brechen; case WeChatConfig.kf_switch_Session: result = wechatmsgService.kfswitchSesion (MSG, Params); brechen; Standard: WeChatmsgService.EventDefauLTreply (MSG, Params); brechen; } } brechen; Standard: WechatmsgService.Defaultmsg (MSG, Params); }} Rückgabeergebnis; }}Geben Sie einfach eine Idee an, bitte bewegen Sie sich, wenn Sie sich auf den Code beziehen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.