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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zc_ad/article/details/83378345

微信有很多消息时间,如:文本、图片、语音、事件等消息,微信服务器将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;
	}
}

猜你喜欢

转载自blog.csdn.net/zc_ad/article/details/83378345