记得上下班打卡 | git大法好,push需谨慎

Commit 86d7e97e authored by jiangxiulong's avatar jiangxiulong

record WxMpMessageRouter和WxMessageInMemoryDuplicateChecker改成单例

parent ec94d77d
package com.liquidnet.service.sweet.config;
import com.liquidnet.service.sweet.handler.SubscribeHandler;
import com.liquidnet.service.sweet.handler.UnsubscribeHandler;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.api.WxMessageInMemoryDuplicateChecker;
import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl;
......@@ -48,9 +53,18 @@ public class WechatMpConfigure {
private WxMpService wxMpZhengzaiService;
private WxMpService wxMpModernskyService;
private WxMpMessageRouter wxMpZhengzaiMessageRouter;
private WxMpMessageRouter wxMpModernskyMessageRouter;
private WxMessageInMemoryDuplicateChecker wxMessageInMemoryDuplicateChecker;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private SubscribeHandler subscribeHandler;
@Autowired
private UnsubscribeHandler unsubscribeHandler;
@PostConstruct
public void init() {
wxMpZhengzaiService = new WxMpServiceImpl() {
......@@ -77,6 +91,11 @@ public class WechatMpConfigure {
this.setWxMpConfigStorage(wxMpDefaultConfig);
}
};
wxMpZhengzaiMessageRouter = new WxMpMessageRouter(wxMpZhengzaiService);
wxMpModernskyMessageRouter = new WxMpMessageRouter(wxMpModernskyService);
wxMessageInMemoryDuplicateChecker = new WxMessageInMemoryDuplicateChecker();
}
public WxMpService getWxMpService(Integer pnum) {
......@@ -88,4 +107,34 @@ public class WechatMpConfigure {
}
return null;
}
public WxMpMessageRouter getWxMpMessageRouter(Integer pnum) {
switch (pnum) {
case 1:
return wxMpZhengzaiMessageRouter;
case 2:
return wxMpModernskyMessageRouter;
}
return null;
}
public WxMpMessageRouter messageRouter(Integer type) {
WxMpMessageRouter router = getWxMpMessageRouter(type);
// 消息去重
router.setMessageDuplicateChecker(wxMessageInMemoryDuplicateChecker);
// 关注事件
router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.SUBSCRIBE)
.handler(subscribeHandler)
.end();
// 取消关注事件
router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.UNSUBSCRIBE)
.handler(unsubscribeHandler)
.end();
return router;
}
}
......@@ -49,7 +49,9 @@ public class SweetWechatActionCallbackController {
@PostMapping("record")
@ApiOperation("用户动作微信回调")
public String record(
@RequestBody String requestBody,
// @RequestBody String requestBody,
@RequestParam() String requestBody,
// @RequestParam("requestBody") String requestBody,
@RequestParam("type") Integer type,
@RequestParam("signature") String signature,
@RequestParam("timestamp") String timestamp,
......@@ -61,10 +63,10 @@ public class SweetWechatActionCallbackController {
log.info("\n接收微信请求:[type=[{}], openid=[{}], [signature=[{}], encType=[{}], msgSignature=[{}],"
+ " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
type, openid, signature, encType, msgSignature, timestamp, nonce, requestBody);
if (!wechatSignUtils.checkSignature(signature, timestamp, nonce)) {
/* if (!wechatSignUtils.checkSignature(signature, timestamp, nonce)) {
log.info("验签未通过,非法请求,可能属于伪造的请求!");
return "";
}
}*/
return sweetWechatCallbackService.record(requestBody, type, timestamp, nonce, encType, msgSignature);
}
}
package com.liquidnet.service.sweet.service.impl;
import com.liquidnet.service.sweet.config.WechatMpConfigure;
import com.liquidnet.service.sweet.handler.SubscribeHandler;
import com.liquidnet.service.sweet.handler.UnsubscribeHandler;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.api.WxMessageInMemoryDuplicateChecker;
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
......@@ -25,34 +20,9 @@ import org.springframework.stereotype.Service;
@Slf4j
public class SweetWechatCallbackServiceImpl {
@Autowired
private SubscribeHandler subscribeHandler;
@Autowired
private UnsubscribeHandler unsubscribeHandler;
@Autowired
WechatMpConfigure wechatMpConfigure;
public WxMpMessageRouter messageRouter(WxMpService wxMpService) {
WxMpMessageRouter router = new WxMpMessageRouter(wxMpService);
// 消息去重
router.setMessageDuplicateChecker(new WxMessageInMemoryDuplicateChecker());
// 关注事件
router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.SUBSCRIBE)
.handler(subscribeHandler)
.end();
// 取消关注事件
router.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT)
.event(WxConsts.EventType.UNSUBSCRIBE)
.handler(unsubscribeHandler)
.end();
return router;
}
public String record(String requestBody, Integer type, String timestamp, String nonce, String encType, String msgSignature) {
if (null == type || type <= 0) {
type = 1;
......@@ -63,7 +33,7 @@ public class SweetWechatCallbackServiceImpl {
// 明文传输的消息
WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(requestBody);
log.info("\n消息内容为:\n[{}] ", inMessage.toString());
WxMpXmlOutMessage outMessage = messageRouter(wxMpService).route(inMessage);
WxMpXmlOutMessage outMessage = wechatMpConfigure.messageRouter(type).route(inMessage);
if (outMessage == null) {
// 假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试
return "";
......@@ -74,7 +44,7 @@ public class SweetWechatCallbackServiceImpl {
WxMpXmlMessage inMessage = WxMpXmlMessage.fromEncryptedXml(requestBody, wxMpService.getWxMpConfigStorage(),
timestamp, nonce, msgSignature);
log.info("\n消息解密后内容为:\n[{}] ", inMessage.toString());
WxMpXmlOutMessage outMessage = messageRouter(wxMpService).route(inMessage);
WxMpXmlOutMessage outMessage = wechatMpConfigure.messageRouter(type).route(inMessage);
if (outMessage == null) {
return "";
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment