微信公衆平臺服務器配置經過後,就能進行下面的開發啦~~
首先能夠查看官方的說明文檔:https://mp.weixin.qq.com/wiki...html
普通消息的類型分爲7種:git
下面介紹實現文本的自動回覆:github
文本消息的XML結構是:服務器
<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>
參數包含:微信
根據開發文檔直接上手--->_>app
實體類的定義:
定義一個BaseMessage,消息基類,封裝通用屬性:微信公衆平臺
public class BaseMessage { // 開發者微信號 private String ToUserName; // 發送方賬號(一個OpenID) private String FromUserName; // 消息建立時間 (整型) private long CreateTime; // 消息類型(text/image/location/link) private String MsgType; // 消息id,64位整型 private long MsgId; /** * 位0x0001被標誌時,星標剛收到的消息 */ private int FuncFlag; public String getToUserName() { return ToUserName; } public void setToUserName(String toUserName) { ToUserName = toUserName; } public String getFromUserName() { return FromUserName; } public void setFromUserName(String fromUserName) { FromUserName = fromUserName; } public long getCreateTime() { return CreateTime; } public void setCreateTime(long l) { CreateTime = l; } public String getMsgType() { return MsgType; } public void setMsgType(String msgType) { MsgType = msgType; } public long getMsgId() { return MsgId; } public void setMsgId(long msgId) { MsgId = msgId; } public int getFuncFlag() { return FuncFlag; } public void setFuncFlag(int funcFlag) { FuncFlag = funcFlag; } }
接下來TextMessage,文本屬性TextMessage:ide
public class TextMessage extends BaseMessage{ // 消息內容 private String Content; public String getContent() { return Content; } public void setContent(String content) { Content = content; } }
必定要注意,屬性名稱須要大寫,屬性名稱須要大寫,屬性名稱須要大寫!!不要問我爲啥這麼強調。post
新建接口MessageService,並實現接口:this
public interface MessageService { /** * 微信公衆號處理 * @param request * @return */ String newMessageRequest(HttpServletRequest request); }
@Service("messageService") public class MessageServiceImpl implements MessageService { private static final Logger LOGGER = LoggerFactory.getLogger(MessageServiceImpl.class); @Override public String newMessageRequest(HttpServletRequest request) { String respMessage = null; try { // xml請求解析 Map<String, String> requestMap = MessageUtil.xmlToMap(request); // 發送方賬號(open_id) String fromUserName = requestMap.get("FromUserName"); // 公衆賬號 String toUserName = requestMap.get("ToUserName"); // 消息類型 String msgType = requestMap.get("MsgType"); // 消息內容 String content = requestMap.get("Content"); LOGGER.info("FromUserName is:" + fromUserName + ", ToUserName is:" + toUserName + ", MsgType is:" + msgType); // 文本消息 if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { //這裏根據關鍵字執行相應的邏輯 /*if(content.equals("xxx")){ }*/ //自動回覆 TextMessage text = new TextMessage(); text.setContent("霍霍哈嘿"+content); text.setToUserName(fromUserName); text.setFromUserName(toUserName); text.setCreateTime(new Date().getTime()); text.setMsgType(msgType); respMessage = MessageUtil.textMessageToXml(text); } // 事件推送 else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) { String eventType = requestMap.get("Event");// 事件類型 // 訂閱 if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) { //文本消息 TextMessage text = new TextMessage(); text.setContent("我無論,我最美!!"); text.setToUserName(fromUserName); text.setFromUserName(toUserName); text.setCreateTime(new Date().getTime()); text.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT); respMessage = MessageUtil.textMessageToXml(text); } // 取消訂閱後用戶再收不到公衆號發送的消息,所以不須要回復消息 else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {// 取消訂閱 } } } catch (Exception e) { LOGGER.error("error......"); } return respMessage; } }
上一篇文章,已經建立了WechatIndexController ,裏面的GET方法用來驗證token,下面直接加一個POST方法,用於進行消息管理。
@Autowired private MessageService messageService; @RequestMapping(method = RequestMethod.POST) public void post(HttpServletRequest request, HttpServletResponse response) { try { request.setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); log.error(e.getMessage(),e); } response.setContentType("text/html;charset=UTF-8"); // 調用核心業務類接收消息、處理消息 String respMessage = messageService.newMessageRequest(request); // 響應消息 PrintWriter out = null; try { out = response.getWriter(); out.print(respMessage); } catch (IOException e) { e.printStackTrace(); log.error(e.getMessage(),e); } finally { out.close(); out = null; } }
啓動服務,關注此微信公衆號,就會按照咱們設置的顯示啦!!
另外,圖文的實現與之相似,這裏不在進行過多的闡述,源碼中已經實現,須要的能夠直接下載查看。