Java WeChat Public Platform Development Management, вы должны сначала прочитать официальные документы
Управление сообщениями WeChat делится на получение обычных сообщений, получение событий, отправка сообщений (пассивный ответ), сообщения о службе клиентов, массовые сообщения и сообщения шаблонов.
1. Получить обычные сообщения
Когда обычный пользователь WeChat отправляет сообщение в общедоступную учетную запись, сервер WeChat будет упаковывать пакет данных XML сообщения POST сообщению в URL, заполненный разработчиком.
Что касается MSGID, официальное объяснение эквивалентно каждому идентификатору сообщения. Что касается веса сообщений, рекомендуется использовать MSGID для очереди. Если сервер WeChat не может получить ответ в течение пяти секунд, он отключится и повторно инициирует запрос и повторно повторит три раза.
Например, пример XML текстового сообщения
<xml> <tousername> <! [Cdata [touser]]> </tousername> <facusername> <! [Cdata [fromuser]]> </fromusername> <CreateTime> 1348831860 </createtime> <sgtype> <! тест]]> </content> <ssgid> 1234567890123456 </msgid> </xml>
Проверьте другие сообщения в официальном документе и просто инкапсулируйте следующее сообщение Abstract Base Class Abstractmsg.java
пакет com.phil.wechat.msg.model.req; импортировать java.io.serializable; / ** * Класс базового сообщения * * @author phil * */ public абстрактный класс Abstractmsg реализует Serializable {Private Static Long Long Serialversionuid = -6244277633057415731L; частная строка Tousername; // разработчик WeChat ID Private String Fromusername; // учетная запись отправителя (OpenID) Private String msgtype = setMsgType (); // Тип сообщения, например/Text/Image Private Long CreateTime; // Время создания сообщений (целое число) частное длинное MSGID; // идентификатор сообщения, 64-битный целый integer/ ** * Тип сообщения * * @return */ public Abstract String setMsgtype (); }Текстовое сообщение Textmsg.java
пакет com.phil.wechat.msg.model.req; / *** Текстовое сообщение* @author phil* @date 30 июня 2017 г.**/ public class textmsg расширяет Abstractmsg {private Static final Long SerialVersionuid = -1764016801417503409L; частный строковый контент; // Текстовое сообщение @Override public String setMsgtype () {return "text"; }}Другие такие ...
2. Пассивно отвечать на сообщения пользователя
После того, как сервер WeChat отправляет сообщение пользователя по адресу сервера разработчиков (настроенный в Центре разработчиков) официальной учетной записи, сервер WeChat отключится, если он не сможет получить ответ в течение пяти секунд и снова инициировать запрос и попробовать три раза. Если во время отладки обнаружено, что пользователь не может получить ответное сообщение, вы можете проверить, поступил ли время обработки сообщений. Если сервер не может гарантировать, что он будет обрабатывать и отвечать в течение пяти секунд, он может напрямую ответить на пустую строку. Сервер WeChat не будет справляться с этим и не будет инициировать повторение.
Если «этот официальный аккаунт не может предоставить услуги на данный момент, пожалуйста, попробуйте еще раз», есть две причины для этого.
Например, текстовое сообщение в ответном сообщении xml Пример
<mml> <tousername> <! [Cdata [touser]]>> </tousername> <facusername> <! [cdata [fromUser]]]> </fromusername> <createtime> 12345678 </createtime> <sgtype> <! <SOTED> <! [CDATA [Hello]]> </content> </xml>
В простом пакете
Ответ сообщение абстрактное базовое класс respabstractmsg.java
пакет com.phil.wechat.msg.model.resp; импортировать java.io.serializable; / ** * Базовый класс сообщений (общедоступная учетная запись-> обычный пользователь) * * @author Phil * */ public Abstract Class respabstractmsg {// учетная запись приемника (полученная открытая) частная строка tousername; // разработчик WeChat ID Private String Fromusername; // Время создания сообщений (интегральное) частное длинное творчество; // Тип сообщения (Text/Music/News) Private String msgtype = setMsgtype (); // Тип сообщения публичная абстрактная строка setmsgtype (); } Ответ текстовое сообщение ResptextMsg.java
пакет com.phil.wechat.msg.model.resp; / ** * Ответить на сообщения изображения * * @author Phil * @data 26 марта 2017 г. * */ public class rospimagemsg extends respabstractmsg {частное изображение; @Override public String setMsgType () {return "Image"; } / ** * * * @Author Phil * @Date 19 июля 2017 г. * * / Public Class Image {// загружать мультимедийные файлы через интерфейс в управление материалами, чтобы получить идентификатор. Private String MediaId; public String getMediAid () {return mediaId; } public void setMediAid (String MediaId) {mediaId = mediaID; }}} Другие типы сообщений следующие ...
3. Обработка сообщений
Мастер XML SAINING
пакет com.phil.wechat.msg.controller; импортировать java.io.ioexception; импортировать java.io.inputstream; импортировать java.util.map; импортировать java.util.objects; Импорт org.apache.commons.lang3.stringutils; Импорт org.dom4j.documentException; Импорт org.slf4j.logger; Импорт org.slf4j.loggerfactory; Импорт org.springframework.beans.factory.annotation.autowired; Import org.springframework.sterotype.controller; Импорт org.springframework.web.bind.annotation.requestmapping; Импорт 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 сентября 2017 г. * */@Controller @Requestmapping ("/weChat") открытый класс weChatmsgController extends baseController {private logger = loggerFactory.getLogger (this.getClass ()); @Autowired private weChatmsgservice weChatmsgservice; /** * Убедитесь, отправляется ли информация с сервера WeChat и обработайте сообщение * @param out * @throws ioexception */@requestmapping (value = "/handler", method = {requestmethod.get, requestmethod.post}) public void processpost () throws exection {this.getRequest ().). this.getResponse (). SetCaracterCoding ("UTF-8"); boolean iSpost = objects.equals ("post", this.getRequest (). getMethod (). touppercase ()); if (ispost) {logger.debug («Доступ успешно, логика обрабатывается»); String respxml = defaultMsgDispose (this.getRequest (). GetInputStream ()); // processRequest (запрос, ответ); if (stringutils.isnotblank (respxml)) {this.getResponse (). getWriter (). write (respxml); }} else {string signature = this.getRequest (). getParameter ("signature"); // TimeStamp String TimeStamp = this.getRequest (). GetParameter ("TimeStamp"); // случайное число string nonce = this.getRequest (). GetParameter ("nonce"); // Проверьте запрос, проверив подпись. Если проверка успешна, верните EchoStr, как есть, указывая на то, что доступ успешен. В противном случае, доступ не работает, если (SignatureUtil.CheckSignature (Signature, TimeMap, nonce)) {// случайная строка string echoStr = this.getRequest (). GetParameter ("echoStr"); logger.debug ("Введите успешно, echoStr {}", echoStr); this.getResponse (). getWriter (). написать (echoStr); }}} / ** * Метод обработки по умолчанию * @param input * @return * @throhs exception * @Throws DocumentException * / Private String DefaultMsGdispose (inputStream inputStream) throws Exception {String result = null; if (inputstream! = null) {map <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; } логический успех = resultObj.issuccess (); // Если TRUE, это означает, что файл XML возвращается, и его можно преобразовать напрямую, в противном случае в соответствии с типом if (успех) {result = resultObj.getObject (). ToString (); } else {int type = resultObj.getType (); // 1 графическое сообщение указано здесь, в противном случае оно будет преобразовано напрямую, если (type == weChatresult.newsmsg) {respnewsmsg newsmsg = (respnewsmsg) resultobj.getobject (); Результат = msgutil.newsmsgtoxml (Newsmsg); } else {respabstractmsg basicmsg = (respabstractmsg) resultobj.getobject (); result = msgutil.msgtoxml (basicmsg); }} else {result = "msg неверно"; }} return result; } / ** * Обработка ядра * * @param msg * Базовый класс сообщения * @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: // Результат текстового сообщения = weChatmsgService.textmsg (msg, params); перерыв; case weChatConfig.req_message_type_image: // Результат сообщения изображения = wechatmsgservice.imagemsg (msg, params); перерыв; case weChatconfig.req_message_type_link: // Результат сообщения ссылки = wechatmsgservice.linkmsg (msg, params); перерыв; case weChatconfig.req_message_type_location: // result geographic desult = weChatmsgService.locationMsg (msg, params); перерыв; case weChatconfig.req_message_type_voice: // audio message result = wechatmsgservice.voicemsg (msg, params); перерыв; case weChatconfig.req_message_type_shortvideo: // Результат короткого видео сообщения = wechatmsgservice.shortvideo (msg, params); перерыв; case weChatconfig.req_message_type_video: // video -сообщения result = wechatmsgservice.shortvideo (msg, params); перерыв; case weChatconfig.req_message_type_video: // Результат видео сообщения = wechatmsgservice.videomsg (msg, params); перерыв; case weChatconfig.req_message_type_event: // string Сообщение eventtype = params.get ("event"); // if (eventtype! = null &&! "". перерыв; case wechatconfig.event_type_unsubscribe: result = weChatmsgService.unsubscribe (msg, params); перерыв; case wechatconfig.event_type_scan: result = weChatmsgservice.scan (msg, params); перерыв; case wechatconfig.event_type_location: result = weChatmsgservice.eventlocation (msg, params); перерыв; case wechatconfig.event_type_click: result = weChatmsgservice.eventClick (msg, params); перерыв; case wechatconfig.event_type_view: result = weChatmsgservice.eventView (msg, params); перерыв; case wechatconfig.kf_create_session: result = weChatmsgservice.kfcreatesession (msg, params); перерыв; case wechatconfig.kf_close_session: result = weChatmsgservice.kfclosesession (msg, params); перерыв; case wechatconfig.kf_close_session: result = weChatmsgservice.kfclosesession (msg, params); перерыв; case wechatconfig.kf_switch_session: result = weChatmsgservice.kfswitchsession (msg, params); перерыв; по умолчанию: wechatmsgservice.eventdefaultreply (msg, params); перерыв; } } перерыв; по умолчанию: wechatmsgservice.defaultmsg (msg, params); }} return result; }}Просто дайте идею, пожалуйста, перейдите, если вы обратитесь к коду
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.