微信消息接收以及被动回复

xiaoxiao2025-06-18  92

微信有很多消息时间,如:文本、图片、语音、事件等消息,微信服务器将POST消息的XML数据包到开发者填写的URL上。即与你微信验证token的接口一样,不过是post请求,此处只演示消息的接收,以及文本消息的被动回复。

需要额外引用的maven依赖:

<!--xml解析--> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.0</version> </dependency>

定义返回消息POJO类:

public class TextMsgDTO{ public String ToUserName; public String FromUserName; public String CreateTime; public String MsgType; public String Content; public String msgToXml(){ XStream xstream=new XStream(); xstream.alias("xml", this.getClass()); return xstream.toXML(this); } }

定义xml解析工具类:

public class XMLUtil { public static Document readXML(String str){ Document document=null; try { document= DocumentHelper.parseText(str); } catch (DocumentException e) { e.printStackTrace(); } return document; } /** * 读取节点信息 * @param node * @param name * @return */ public static String readNode(Element node,String name){ return node.element(name).getTextTrim(); } }

定义消息接收接口以及消息的处理:

@RestController @RequestMapping("/wx") public class WXController { @Autowired WXService wxService; @PostMapping("") public Object receiveMessage(@RequestBody String xml){ return wxService.TXMessage(xml); } public interface WXService { Object TXMessage(String xml); } @Service public class WXServiceImpl implements WXService { private Logger logger = LoggerFactory.getLogger(WXServiceImpl.class); /** * 接收微信消息回调并返回 * @param xml * @return */ @Override public Object TXMessage(String xml) { /**将信息转换为Document*/ Document document = XMLUtil.readXML(xml); Element root = document.getRootElement(); logger.info("receive:"+xml); String replyContent; String toUserName = XMLUtil.readNode(root, "ToUserName"); String fromUserName = XMLUtil.readNode(root, "FromUserName"); String msgType = XMLUtil.readNode(root, "MsgType"); if("text".equals(msgType)){ replyContent = XMLUtil.readNode(root, "Content"); }else{ replyContent = "你发送的消息类型为:"+msgType; } String replyMsg = packageReplyTextMsg(fromUserName,toUserName,replyContent); logger.info("reply:"+replyMsg); return replyMsg; } /**封装返回消息*/ private String packageReplyTextMsg(String fromUserName, String toUserName, String replyContent){ TextMsgDTO textMsg = new TextMsgDTO(); textMsg.MsgType = "text"; textMsg.FromUserName = toUserName; textMsg.ToUserName = fromUserName; textMsg.CreateTime = String.valueOf(System.currentTimeMillis()).substring(0,10); //将XML消息的参数都转化内容回复给微信 textMsg.Content = replyContent; String replyMsg = null; try { //将对象转化为XML replyMsg = textMsg.msgToXml(); } catch (Exception e) { e.printStackTrace(); } return replyMsg; } }

 

转载请注明原文地址: https://www.6miu.com/read-5032065.html

最新回复(0)