1.发现
之前已经讨论过如何过滤微信推送的事件消息和普通消息,今天查看线上微信接口推送事件日志发现有重复消息,在系统没有高负载的情况下,这是基本不可能出现的情况。
再看一遍微信公众号开发文档的排重建议
微信公众号开发文档 写道
用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。
微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次
关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。
假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。
微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次
关于重试的消息排重,推荐使用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字段也加入其中即可.
具体参考我之前的文章《微信推送消息排重解决办法》
欢迎指正,感谢关注。
相关推荐
6. **消息推送流程**:通常流程包括:用户触发事件 -> 小程序调用后端接口 -> 后端验证用户权限并获取模板ID -> 后端构建模板消息内容 -> 发送模板消息到微信服务器 -> 微信服务器将消息推送给用户。 7. **错误处理...
4. 推送模块:结合第三方推送服务(如Pusher、Firebase Cloud Messaging等),实现实时消息推送。 四、Uniapp前端框架 Uniapp是一个使用Vue.js开发所有端应用的统一框架,支持跨平台开发,包括H5、微信小程序、App...
本教程将基于提供的"java企业微信和钉钉向普通用户发送消息"案例,深入讲解如何利用Java API与这两个主流的企业通讯平台进行集成,从而实现消息推送功能。 首先,我们来看`RemoteServiceUtil.java`,这是一个通用的...
通过这个小程序,用户可以直接将感兴趣的文章或书籍等内容从微信推送到自己的Kindle设备上,无需经过复杂的电脑操作,极大地提升了阅读体验。 该项目的核心功能分为前端(微信小程序)和后端两个部分。前端部分是...
8. **回调处理**:微信支付在支付成功或失败后,会主动推送通知到商户设置的回调URL。后端需要监听这个回调,并进行相应的业务逻辑处理,如订单状态更新、库存管理等。 9. **异常处理与错误码解析**:在对接微信...
Bmob后端云的主要功能服务包括云数据库服务、文件存储、云函数、消息推送、用户管理、应用配置等。 云数据库服务是Bmob后端云的核心功能之一。开发者通过调用Bmob官方小程序SDK提供的接口,可以实现对数据项、数据...
Bmob是一个云端数据库和后端服务平台,它为开发者提供了简单易用的API接口,可以快速搭建应用的后端服务,如用户认证、数据存储、实时推送等。在微信小程序的外卖应用中,bmob后端可以扮演以下几个角色: 1. 用户...
企业微信作为一个专业的办公平台,可能提供了更严格的使用规范和更好的安全性,可以避免类似滥用的问题,为用户提供稳定的消息推送服务。 标签“java”表明项目的核心编程语言是Java,意味着这个服务可能使用Java来...
8. **WebSocket通信**:如果需要实时通信,例如聊天功能或推送通知,微信小程序和Java后端还可以利用WebSocket建立持久化的连接,实现双向通信。 9. **安全性考虑**:在前后端交互过程中,要关注数据加密、防止XSS...
对于微信小程序,可能涉及用户登录、消息推送、好友关系等数据的管理。 5. **微信小程序API与后端交互** 微信小程序提供了多种API,如wx.request()用于与服务器通信。开发者需要确保后端接口与小程序API兼容,处理...
10. **推送通知**:微信小程序支持消息推送,当订单状态发生变化时,可以通过微信服务器向用户发送通知,提高用户体验。 通过学习和实践这个案例,开发者不仅可以掌握微信小程序的基本开发技能,还能了解到如何结合...
- `支付结果通知API`:接收微信服务器推送的支付结果,进行业务逻辑处理。 3. **Java后端实现**: - 使用`WeChatPay SDK`:Java后端通常会集成微信支付的官方SDK,简化API调用和签名生成。 - 安全性:处理敏感...
3. **支付回调**:支付完成后,微信服务器会通过异步通知(notify_url)将支付结果推送给后端。后端需要验证回调信息的真伪,并更新订单状态,如确认支付成功、处理退款请求等。 4. **企业付款**:对于某些业务场景...
在天气应用中,后端可能需要从权威气象API获取实时或预测天气数据,然后将这些数据格式化并推送给前端。 对于后端部分,开发者可能使用Spring Boot框架,它简化了Java web应用的开发。Spring Boot集成了许多常用库...
此外,为了保证用户体验,小程序还可能包含推送通知功能,例如预约成功提醒、服务人员确认通知等,这需要用到微信小程序的推送服务。同时,考虑到数据安全,源码中应有相应的权限控制机制,防止非法访问和操作。 总...
7. **WebSocket**:为了实现实时通信,如聊天功能,后端可能采用了WebSocket协议,这是一种在单个TCP连接上进行全双工通信的协议,能实现服务器主动向客户端推送信息。 8. **云服务**:考虑到微信小程序的部署和...
这是一个全面的Web应用程序开发项目,整合了Spring Boot后端、Vue.js前端以及微信小程序和Vue.js用户移动端。这个项目展示了现代Web开发中的全栈技术栈,涵盖了从服务器端到客户端的多个层面。以下是对各部分的详细...
微信小程序-k-push(含后端).zip是一个包含微信小程序完整源码及后端服务的压缩包,旨在提供一套完整的推送服务解决方案。这个项目的核心功能是实现消息推送,这对于任何实时交互的应用来说都是至关重要的。下面...
系统需要实现新闻的实时推送,当有新新闻发布时,通过微信小程序的消息推送功能,让用户第一时间得知。 第四章 系统测试与优化 4.1 单元测试与集成测试 对各个功能模块进行单元测试,确保其正常运行。集成测试则...
小程序支持多种组件和API,能够实现丰富的交互效果和功能,如地图、支付、推送等。 2. **PHP后台**:PHP是一种广泛使用的开源脚本语言,尤其适用于Web开发,可以嵌入到HTML中。在这个项目中,PHP作为后端服务器语言...