Java WeChat Platform Publik Pengembangan Manajemen Berita, Anda harus terlebih dahulu membaca dokumen resmi
Manajemen pesan WeChat dibagi menjadi menerima pesan biasa, menerima dorongan acara, mengirim pesan (balasan pasif), pesan layanan pelanggan, pesan massal, dan pesan templat.
1. Terima pesan biasa
Ketika pengguna WeChat biasa mengirim pesan ke akun publik, server WeChat akan mengemas paket data XML dari pesan posting ke URL yang diisi oleh pengembang.
Mengenai MSGID, penjelasan resmi setara dengan setiap ID pesan. Mengenai bobot pesan coba lagi, disarankan untuk menggunakan MSGID untuk mengantri. Jika server WeChat gagal menerima respons dalam waktu lima detik, itu akan memutuskan dan memulai kembali permintaan, dan coba lagi total tiga kali.
Misalnya, contoh XML dari pesan teks
<xml> <Tousername> <! [Cdata [Touser]]> </Tousername> <Fromusername> <! [Cdata [FromUser]]> </fromusername> <mreateTime> 1348831860 </createTime> <msgType> <! tes]]> </content> <msgid> 1234567890123456 </msgid> </xml>
Periksa pesan lain dalam dokumen resmi, dan cukup merangkum pesan abstrak abstrak abstrak abstractmsg.java
paket com.phil.wechat.msg.model.req; impor java.io.serializable; / ** * Kelas Pesan Dasar * * @Author Phil * */ Kelas Publik Abstrak Abstrakmsg Menerapkan Serializable {Private Static Final Long SerialVersionUid = -6244277633057415731L; Private String Tousername; // pengembang weChat id pribadi string fromusername; // Akun Pengirim (OpenID) Private String msgType = setMsgType (); // Jenis pesan, misalnya/teks/gambar private createTime long; // Waktu Pembuatan Pesan (Integer) Private Long Msgid; // ID pesan, integer 64-bit/ ** * Jenis pesan * * @return */ public abstrak string setMSgType (); }Pesan teks TextMSg.java
paket com.phil.wechat.msg.model.req; / *** Pesan Teks* @Author Phil* @Date 30 Juni 2017**/ TextMSG kelas publik Extends AbstractMSG {private static final long serialversionuid = -1764016801417503409l; konten string pribadi; // pesan teks @Override string publik setMsgType () {return "text"; }}Yang lainnya seperti ini ...
2. Balas secara pasif ke pesan pengguna
Setelah server WeChat mengirim pesan pengguna ke alamat server pengembang (dikonfigurasi di pusat pengembang) dari akun resmi, server WeChat akan memutuskan jika gagal menerima respons dalam waktu lima detik dan memulai permintaan lagi, dan coba total tiga kali. Jika selama debugging, ditemukan bahwa pengguna tidak dapat menerima pesan respons, Anda dapat memeriksa apakah pemrosesan pesan diatur waktunya. Jika server tidak dapat menjamin bahwa itu akan memproses dan membalas dalam waktu lima detik, itu dapat langsung membalas string kosong. Server WeChat tidak akan menangani ini dan tidak akan memulai coba lagi.
Jika "akun resmi ini tidak dapat memberikan layanan untuk saat ini, silakan coba lagi nanti", ada dua alasan untuk ini.
Misalnya, contoh pesan teks balasan XML
<xml> <Tousername> <! [Cdata [Touser]]> </Tousername> <Fromusername> <! [Cdata [FromUser]]> </fromusername> <mreateTime> 12345678 </createTime> <msgtype> <! </xml>
Dalam paket sederhana
Balas pesan abstrak kelas dasar respabstractmsg.java
paket com.phil.wechat.msg.model.resp; impor java.io.serializable; / ** * Pesan Kelas Basis (Akun Publik-> Pengguna Biasa) * * @Author Phil * */ Kelas Abstrak Publik RespabStractMSg {// Akun Penerima (diterima OpenID) Private String Tousername; // pengembang weChat id pribadi string fromusername; // Waktu Pembuatan Pesan (Integral) Private Long CreateTime; // Jenis Pesan (Teks/Musik/Berita) Private String msgType = setMSgType (); // Jenis Pesan String abstrak publik setMSgType (); } Balas pesan teks restextmsg.java
paket com.phil.wechat.msg.model.resp; / ** * Balas ke pesan gambar * * @author phil * @data 26 Maret 2017 * */ kelas publik respimagemsg memperluas respAbstractmsg {gambar gambar pribadi; @Override public string setMSgType () {return "image"; } / ** * * @author Phil * @Date 19 Juli 2017 * * / Gambar kelas publik {// Unggah file multimedia melalui antarmuka dalam manajemen materi untuk mendapatkan ID. Private String MediaId; public string getmediaid () {return mediaId; } public void setmediaId (String MediaId) {MediaD = MediaId; }}} Jenis pesan lainnya adalah sebagai berikut ...
3. Pemrosesan Pesan
Master XML Parsing
paket com.phil.wechat.msg.controller; impor java.io.ioException; impor java.io.inputstream; impor java.util.map; impor java.util.objects; impor org.apache.commons.lang3.stringutils; impor org.dom4j.documentException; impor org.slf4j.logger; impor org.slf4j.loggerFactory; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.stereotype.controller; impor org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.bind.annotation.requestmethod; impor com.phil.modules.config.wechatconfig; impor com.phil.modules.util.msgutil; impor com.phil.modules.util.signateutil; impor com.phil.modules.util.xmlutil; impor com.phil.wechat.base.controller.basecontroller; impor com.phil.wechat.base.result.wechatResult; impor com.phil.wechat.msg.model.req.basicmsg; impor com.phil.wechat.msg.model.resp.respabstractmsg; impor com.phil.wechat.msg.model.respespnewsmsg; impor com.phil.wechat.msg.model.respespnewsmsg; impor com.phil.wechat.msg.service.wechatmsgservice; /** * @author Phil * @Date 19 September 2017 * */@Controller @RequestMapping ("/weChat") kelas publik WeChatMSgController memperluas Basecontroller {private Logger Logger = LoggerFactory.getLogger (this.getClass ()); @Autowired private weChatMSGService weChatMSGService; /** * Verifikasi apakah informasi tersebut dikirim dari server WeChat dan memproses pesan * @param out * @throws IoException */@RequestMapping (value = "/handler", Method = {requestMethod.get, requestMethod.post}) public ProcessPost () Lempar Pengecualian {getReQuest (). this.getResponse (). SetCharacterencoding ("UTF-8"); boolean ispost = objeks.equals ("post", this.getRequest (). getMethod (). Touppercase ()); if (isPost) {logger.debug ("akses berhasil, logika sedang diproses"); String respxml = defaultMsgdispose (this.getRequest (). GetInputStream ()); // prosesequest (permintaan, respons); if (stringutils.isnotblank (respxml)) {this.getResponse (). getWriter (). tulis (respxml); }} else {string Signature = this.getRequest (). getParameter ("Signature"); // timestamp string timestamp = this.getRequest (). GetParameter ("timestamp"); // string nomor acak nonce = this.getRequest (). GetParameter ("nonce"); // Verifikasi permintaan dengan memeriksa tanda tangan. Jika verifikasi berhasil, pengembalian Echostr sebagaimana adanya, menunjukkan bahwa akses berhasil. Jika tidak, akses gagal jika (Signatureutil.CheckSignature (tanda tangan, timestamp, nonce)) {// string acak string echoStr = this.getRequest (). GetParameter ("echoStr"); Logger.Debug ("Enter Success, Echostr {}", EchoStr); this.getResponse (). getWriter (). write (echostr); }}} / ** * Metode pemrosesan default * @param input * @return * @throws Exception * @throws DocumentException * / Private String defaultMSgDispose (inputStream inputStream) melempar pengecualian {string result = null; if (inputStream! = null) {peta <string, string> params = xmlutil.parseStreamToMap (inputStream); if (params! = null && params.size ()> 0) {BASICMSG msginfo = new BASICMSG (); 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 (); // Jika benar, itu berarti bahwa file XML dikembalikan, dan dapat dikonversi secara langsung, sebaliknya sesuai dengan tipe jika (sukses) {hasil = resultobj.getObject (). ToString (); } else {int type = resultobj.getType (); // 1 Pesan grafis ditentukan di sini, jika tidak, itu akan dikonversi secara langsung jika (type == wechatresult.newsmsg) {respnewsmsg newsmsg = (respnewsmsg) resultobj.getObject (); hasil = msgutil.newsmsgtoxml (newsmsg); } else {respAbstractmsg dasarsmsg = (respAbstractmsg) resultobj.getObject (); Hasil = msgutil.msgtoxml (BASICMSG); }} else {result = "msg salah"; }} hasil pengembalian; } / ** * Pemrosesan inti * * @param msg * Pesan kelas basis * @param params * xml data parsed * @return * / private weChatResult corehandler (msg dasar, peta <string, string> params) {wechatResult hasil = null; String msgType = params.get ("msgType"); if (stringutils.isempty (msgType)) {switch (msgType) {case wechatconfig.req_message_type_text: // hasil pesan teks = wechatmsgservice.textmsg (msg, params); merusak; case wechatconfig.req_message_type_image: // hasil pesan gambar = wechatmsgservice.imagemsg (msg, params); merusak; case wechatconfig.req_message_type_link: // tautan hasil hasil = weChatMSgService.linkmsg (msg, params); merusak; case wechatconfig.req_message_type_location: // hasil lokasi geografis = wechatmsgservice.locationMsg (msg, params); merusak; case wechatconfig.req_message_type_voice: // audio hasil hasil = wechatmsgservice.voicemsg (msg, params); merusak; case wechatconfig.req_message_type_shortvideo: // hasil pesan video pendek = wechatmsgservice.shortvideo (msg, params); merusak; case weChatconfig.req_message_type_video: // Video Pesan Hasil = weChatMSgService.Shortvideo (msg, params); merusak; case weChatconfig.req_message_type_video: // Video Pesan Hasil = weChatMSgService.videomsg (msg, params); merusak; case wechatconfig.req_message_type_event: // pesan acara string eventType = params.get ("event"); // if (eventType! = null &&! " merusak; case wechatconfig.event_type_unsubscribe: result = wechatmsgservice.unsubscribe (msg, params); merusak; case wechatconfig.event_type_scan: result = wechatmsgservice.scan (msg, params); merusak; case wechatconfig.event_type_location: result = wechatmsgservice.eventlocation (msg, params); merusak; case wechatconfig.event_type_click: result = wechatmsgservice.eventclick (msg, params); merusak; case wechatconfig.event_type_view: result = wechatmsgservice.eventview (msg, params); merusak; case wechatconfig.kf_create_session: result = weChatMSgService.kfcreateSession (msg, params); merusak; case wechatconfig.kf_close_session: hasil = wechatmsgservice.kfclosesession (msg, params); merusak; case wechatconfig.kf_close_session: hasil = wechatmsgservice.kfclosesession (msg, params); merusak; case wechatconfig.kf_switch_session: hasil = wechatmsgservice.kfswitchSession (msg, params); merusak; default: weChatMSgService.eventDefaultreply (msg, params); merusak; } } merusak; Default: weChatMSGService.DefaultMSG (msg, params); }} hasil pengembalian; }}Cukup berikan ide, silakan pindah jika Anda merujuk ke kode tersebut
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.