@PostMapping(produces = "application/xml;charset=UTF-8")
public String receiveWechatNotification(@RequestBody String body, HttpServletRequest request) {
log.info("controller " + body);
try {
WechatCallbackEvent event = parser.parse(body);
if (event instanceof WechatCallBackScanEvent) {
//扫码
WechatCallBackScanEvent scanEvent = (WechatCallBackScanEvent) event;
String openId = scanEvent.getOpenId();
return handleScanEvent(scanEvent);
} else if (event instanceof WechatCallbackSubscribeEvent) {
//直接关注
WechatCallbackSubscribeEvent subscribeEvent = (WechatCallbackSubscribeEvent) event;
String openid = subscribeEvent.getOpenId();
return defaultCreateWelcomeMsg(openid);
} else if (event instanceof WechatCallbackUnsubscribeEvent) {
//取关
WechatCallbackUnsubscribeEvent unsubscribeEvent = (WechatCallbackUnsubscribeEvent) event;
String openid = unsubscribeEvent.getOpenId();
handleUnsubscribeEvent(openid);
return "success";
} else if (event instanceof WechatCallbackClickEvent) {
//点击事件
} else if (event instanceof WechatCallbackTextEvent) {
//TODO 关键字事件 暂时不处理
// WechatCallbackTextEvent textEvent = (WechatCallbackTextEvent) event;
// return replyKeywordMessage(textEvent.getOpenId(), textEvent.getContent());
WechatCallbackTextEvent textEvent = (WechatCallbackTextEvent) event;
WechatCallBackScanEvent scanEvent = (WechatCallBackScanEvent) event;
String openId = scanEvent.getOpenId();
String content = textEvent.getContent();
if (content.contains("交流会")) {
// 用户发送了"交流会"关键字时,回复信息
WxMpXmlOutTextMessage outMessage = WxMpXmlOutTextMessage.TEXT()
.content("感谢您的关注!我们将为您提供最新的交流会信息,请保持关注!")
.fromUser(textEvent.getFromUserName())
.toUser(textEvent.getToUserName())
.build();
String responseXml = outMessage.toXml();
System.out.println("Response XML: " + responseXml);
return responseXml; // 返回响应给微信服务器
采用的明文方式
返回

尴尬,to 和 from 反了