java如何监听微信关注事件,Java后端接收用户关注以及发送消息或者取消微信公众号的操作...
请求的Controller
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@PostMapping(value = "/notifyMsg", produces = "text/plain;charset=utf-8")
public Object notify(@RequestBody String xml) {
log.info("后台接收到公众号发来的数据是:\n{}", xml);
// 把微信发送给后端的xml消息转成WechatNotifyRequestVO对象start
WechatNotifyRequestVO wechatNotifyRequestVO = XmlUtil.fromXML(xml, WechatNotifyRequestVO.class);
// 把微信发送给后端的xml消息转成WechatNotifyRequestVO对象end
if (StringUtils.equals(wechatNotifyRequestVO.getEvent(), "subscribe")) {
log.info("用户关注了微信公众号, 这里写自己的业务逻辑.....");
}
if (StringUtils.equals(wechatNotifyRequestVO.getEvent(), "unsubscribe")) {
log.info("用户取消关注公众号, 这里写自己的业务逻辑......");
}
return StringUtils.EMPTY;
}
}
WechatNotifyRequestVO类:
import com.thoughtworks.xstream.annotations.XStreamAlias;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 详情见微信官方文档
* https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html
*/
@Data
@Accessors(chain = true)
@XStreamAlias(value = "xml")
public class WechatNotifyRequestVO {
@ApiModelProperty("开发者微信号")
@XStreamAlias(value = "ToUserName")
private String toUserName;
@ApiModelProperty("发送方帐号(一个OpenID)")
@XStreamAlias(value = "FromUserName")
private String fromUserName;
@ApiModelProperty("消息创建时间 (整型)")
@XStreamAlias(value = "CreateTime")
private Integer createTime;
@ApiModelProperty("消息类型,event")
@XStreamAlias(value = "MsgType")
private String messageType;
@ApiModelProperty("事件类型,subscribe(订阅)、unsubscribe(取消订阅)")
@XStreamAlias(value = "Event")
private String event;
}
XmlUtil工具类
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;
import com.thoughtworks.xstream.io.xml.XppDriver;
public class XmlUtil {
private XmlUtil() {
}
/**
* xml文档解析为对象
*
* @param xml xml文档
* @param clazz 要转换的类
* @return 对象
*/
public static T fromXML(String xml, Class clazz, Class... childClazz) {
XStream xmlStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));
XStream.setupDefaultSecurity(xmlStream);
xmlStream.processAnnotations(new Class[]{clazz});
xmlStream.processAnnotations(childClazz);
xmlStream.allowTypes(new Class[]{clazz});
xmlStream.allowTypes(childClazz);
xmlStream.ignoreUnknownElements();
Object result = xmlStream.fromXML(xml);
return (T) result;
}
/**
* 对象组装成xml
*
* @param object 要转换的对象
* @return xml文档
*/
public static String toXML(Object object) {
//转换成XML
XStream xmlStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));
XStream.setupDefaultSecurity(xmlStream);
xmlStream.processAnnotations(new Class[]{object.getClass()});
xmlStream.allowTypes(new Class[]{object.getClass()});
return xmlStream.toXML(object);
}
}
java如何监听微信关注事件,Java后端接收用户关注以及发送消息或者取消微信公众号的操作...相关推荐
- java起socket监听,java socket 监听示例,javasocket,java socket监
java socket 监听示例,javasocket,java socket监 java socket监听示例: socket监听需要使用SocketServer类,如下代码:package cn. ...
- java属性监听_Java event事件监听属性值变化 demo
1.定义一个 ValueChangedEvent ValueChangedEvent用于在设置属性值的时候,触发事件. package org.teamlet; import java.util.Ev ...
- java zk监听异步_zk事件的监听和处理2
长操作对于同一个桌面事件是被顺序处理的.换个说法,一个事件的处理程序将可以阻塞所有的后续处 理程序.一个长时间被阻塞的请求可能是不可接受的(the time blocking user's reque ...
- java怎么监听多个组件,java web(五):java web三大组件之另外两个和八大监听器
java的三大组件指Servlet.Filter.Listener.八大监听器指八个接口.前面介绍了Servlet,现在介绍一下Filter拦截器以及拦截地址的设置, Listener监听那些事件. ...
- js监听鼠标拖动事件(按住左键拖动触发,松开左键取消)
此段代码,实现了左键点击id元素内区域后,拖动鼠标到边缘区域滚动条(内部class元素的滚动条)自动滚动,松开鼠标后取消事件 业务需要记录一下 $(function () {var div=docum ...
- java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动
首先解释一下键盘出现延迟的原因: 其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢? 你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的? 所以嘛,键盘 ...
- java动作监听退出程序_监听获取程序退出事件(Linux、Windows、Java、C++)
监听程序退出事件,主要是用于程序的优雅退出. 下面针对Java.C++在Windows.Linux下的处理分别进行介绍. 1.Java监听程序退出事件 Java本身是跨平台的,不必关系Windows还 ...
- Java中使用JNA实现全局监听Linux键盘事件
title: Java中使用JNA实现全局监听Linux键盘事件 date: 2019-05-03 19:08:00 Java中使用JNA实现全局监听Linux键盘事件 用JNA实现的键盘监听,在Wi ...
- Java中使用JNA实现全局监听Windows键盘事件
title: Java中使用JNA实现全局监听Windows键盘事件 date: 2019-05-02 21:55:00 Java中使用JNA实现全局监听Windows键盘事件 前言: 一直打算做一个 ...
最新文章
- Openssl私建CA
- 2020 最新自动驾驶技术报告出炉:Waymo、特斯拉、沃尔沃技术方案大起底
- CDN 二级回源实现
- sql left join 去重_混入了一些奇怪的东西?SQL小技巧之数据去重
- java安全编码指南之:拒绝Denial of Service
- oracle管理认证方式,关于Oracle数据库管理员认证方法简述
- 100米队伍,从队伍后到前_我们的队伍
- python-练习-查找匹配-模拟数据库的查找-小例子
- Multi_thread--Linux下多线程编程中信号量介绍及简单使用
- 软件测试黑马程序员课后答案_软件测试课后答案
- EBay架构案例分析
- 在IE中用js改变table的innerHTML属性报“未知的运行时错误”
- VScode 把tab置换为空格
- 新手小白之学习python一飞冲天日志之—基本数据类型,条件控制语句
- 12位黄金技术大佬发出警告:一大波必读好书向你袭来
- android emoji unicode编码表,unicode编码
- kepware怎么读modbus/tcp数据_注塑机设备联网?EUROMAP 63?Kepware快速帮您搞定!
- 基于人脸识别的门禁系统设计PPT汇报
- 一年中的最后一天说说_2018最后一天感言说说 怎么发朋友圈告别2018年
- Python Pcan USB通信(基于PcanBus)