forked from chanjarster/weixin-java-tools
-
-
Notifications
You must be signed in to change notification settings - Fork 8.5k
消息排重
Binary Wang edited this page Apr 21, 2019
·
2 revisions
在1.1.0中添加了对消息重排的机制,根据官方文档:
-
公众号的排重方式
普通消息:关于重试的消息排重,推荐使用msgid排重。文档参考。 事件消息:关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。文档参考
-
企业号的排重方式
官方文档完全没有写,参照公众号的方式排重。
本项目采用的是更简单的方式:如果有MsgId就用MsgId排重,如果没有就用FromUserName+CreateTime排重。
本项目采用的实现是基于内存的排重器WxMessageInMemoryDuplicateChecker
,开发人员可以实现自己的WxMessageDuplicateChecker
。
只要在Wx*MessageRouter.route
前setMessageDuplicateChecker
为自己的实现就行了。
String encType = request.getParameter("encrypt_type");
String nonce = request.getParameter("nonce");
String timestamp = request.getParameter("timestamp");
String msgSignature = request.getParameter("msg_signature");
String signature = request.getParameter("signature");
String openid = request.getParameter("openid");
log.info("接收微信请求:[openid=[{}], [openid=[{}],[signature=[{}], encType=[{}], msgSignature=[{}],"
+ " timestamp=[{}], nonce=[{}], requestBody=[{}] ",
appid, openid, signature, encType, msgSignature, timestamp, nonce, requestBody);
// 请求里面没有对应信息。 // if (!this.wxMpService.switchover(appid)) { //appid // throw new IllegalArgumentException(String.format("未找到对应appid=[%s]的配置,请核实!", appid)); // }
if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");
}
return ResponseEntity.ok("");