`
lief
  • 浏览: 26809 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

排重微信推送事件消息发现微信后端服务的逻辑问题

 
阅读更多

 

1.发现

之前已经讨论过如何过滤微信推送的事件消息和普通消息,今天查看线上微信接口推送事件日志发现有重复消息,在系统没有高负载的情况下,这是基本不可能出现的情况。

 

再看一遍微信公众号开发文档的排重建议

微信公众号开发文档 写道
用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。

微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次

关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。

假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。

 

系统打印的重复消息内容为(星号是马赛克):

{FromUserName=oIh7bvukj**********ZvcAIDug, EventKey=https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx2ce10f858dd547eb&redirect_uri=http%3A%2F%2Fwechat.hitumedia.com%2Fhituwechat%2FshakeshakePage.action&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect, Event=VIEW, CreateTime=1452742113, MenuId=401850190, ToUserName=gh_********df, MsgType=event}

 

2.排查

此为事件消息,我用的是FromUserName + CreateTime 排重,如果该消息重复,数据库中必定有了相同FromUserName + CreateTime 的记录,查了事件日志数据表,结果一目了然:



 

3.分析原因

我们微信公众号开启了获取用户地理位置的功能,用户打开微信后点击菜单进入了页面,此时微信后台向我们推送了用户地理位置事件消息和用户点击菜单事件消息,这两个消息的CreateTime 和openid相同,导致被我们系统识别为重复消息,文档推荐的排重方式过滤掉了合法数据,这应该是微信后端服务考虑的不够周全。

 

4.解决

消息排重的时候把Event字段也加入其中即可.

具体参考我之前的文章微信推送消息排重解决办法

 

欢迎指正,感谢关注。

 

  • 大小: 19.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics