微信服务号模版消息重复发送或消息接收不到的解决方案

  • 问题描述
  • 解决思路

问题描述

前段时间开发的服务号,有一个功能是主动向用户推送消息,经查看文档后,发现模版消息可以实现,于是按照文档向微信申请消息模版并开发上线。
我们平台是做线上教育的,有直播功能,每次直播前会向学员推送模版消息提醒用户直播时间和链接。
但是前几天发现一个问题,因为要推送的学员量较大,调用微信接口推送模版消息时,会出现部分学员重复发送,部分学员接收不到的问题(开始的时候微信向我推送过警告,我没在意)。
看到网上其他同行也遇到类似的问题,因此,针对该问题,我的解决思路我做一个总结。

解决思路

原本做这个功能我用到两个表,一个是user,存放用户信息,其中openid 用来向微信推送模版消息,其他字段暂且不提。另一个表是用来存放微信模版的,拿到openid和模版消息,调用微信模版消息接口,即能推送成功。但是短时间内推送过多的消息,微信会报警,具体的报警信息我忘记了,然后就会出现一部分学员收到多条消息,一部分学员收不到消息。
解决这个问题我的思路是减少单位时间内向微信推送消息的频率,每推送一条消息,sleep(500)毫秒(根据个人需要设定时间),再推送下一条。要实现这个功能,需要一个中间表去存储已推送和未推送的user及相应的状态。
表结构如下:
id:主键id
user_id: 用户id,因为要用到其他用户信息,故这里存放id,也可以直接存放openid
msg_id:模版消息的id,根据该id去模版消息表中取相应的数据
status:状态,分为成功、失败、未推送、发送中(可选)
写一个定时任务,每次根据状态,取出第一条未推送的,调用微信接口,然后根据返回状态去update这张表,把状态更新掉即可。
注1:status设置发送中的状态是因为如果一个消息正在发送,下一个定时任务就开始执行了,检测出有发送中状态的,可以直接返回,等待下次定时任务的执行。也可以不设置发送中的状态,那就需要在定时任务上设置锁了,如果如果检测到上一个定时任务没有执行,下一个就不能开始。
粘上我的定时任务作为参考,具体的设置可自行百度。

*/1 * * * *  flock -xn /tmp/sendmessage.lock -c '/usr/local/php/bin/php  /项目目录/artisan SendMessage >>/tmp/sendTemp.log 2>&1'

注2:这个表如果担心后期过大,可以定期清理数据。如果不需要处理发送失败的学员,发送完毕后可立刻清空该表。
–the end–
有不明白的或者有更好解决方案的欢迎留言讨论

微信服务号模版消息重复发送或消息接收不到的解决方案相关推荐

  1. 微信服务号向特定用户发送消息的解决方案

    查找了微信开发文档和一些博客后发现了解决方案. 使用微信服务号的模板消息接口 文档地址: https://mp.weixin.qq.com/wiki?t=resource/res_main&i ...

  2. 微信服务号+支付+php,微信服务号发送营销红包给关注用户步骤及部分php代码

    微信红包 一.前言: 这里主要讲述的是微信服务号给关注用户发送微信红包的相关内容:主要使用的业务场景有:1.业务员匆匆销员的奖励:2.现场会议互动抽奖:3.微信推广转发奖励:4.其他等等等,大开脑洞想 ...

  3. 微信服务号模板消息推送

    一.微信服务号新建模板 二.建立模板消息pojo import java.util.HashMap; import net.sf.json.JSONObject;public class Templa ...

  4. 微信服务号怎样做到每天推送一条消息?

    微信订阅号每天发一次,微信服务号一个月发四次,这是微信定下的规定,无法更改,所以在很多人申请的时候就非常纠结,服务号一个月才4条,相对订阅号特别少.今天来给大家分享一下微号帮平台上的操作,微信服务号怎 ...

  5. cron每月1号_微信服务号按粉丝标签分组群发消息怎样实现?

    使用公众平台群发功能可以实现按粉丝标签分组群发消息,订阅号每天群发1次消息.服务号每月群发4次消息,如果想要实现更多功能效果,可以直接用微号帮平台的服务号每月400次群发功能实现效果,或者自己根据公众 ...

  6. RocketMQ常见问题-消息重复消费和消息重复的问题

    RocketMQ不解决消息重复问题,RocketMQ不解决消息重复问题,RocketMQ不解决消息重复问题,重要的事情说三遍. 基本上说我很讨厌有人问这个问题,问这个问题首先你对消息的生命周期缺乏理解 ...

  7. 微信服务通知消息找回_第三方平台微信服务号模板消息怎么发送

    使用公众号平台模板消息功能,无法发送模板消息,如果想要发送模板消息,可以用第三方平台微号帮功能模板消息群发实现,也可自己根据公众号平台的接口开发实现,均可以为微信服务号发送模板消息,且发送模板消息不占 ...

  8. JAVA连接微信服务号发送模板消息

    最近因为业务需要使用微信服务号推送模板消息,所以就研究了下,在这也回顾和总结下开发流程和注意事项. 1. 微信公众号推送模板消息,需要开通服务号并且需要进行微信认证(这点就不过多记录了).申请到服务号 ...

  9. Java后端发送微信公众号模版消息自创建公用类

    微信公众号模版消息 肯定很多人都被微信的开放平台折磨,我也一样无一例外,也是根据公司的业务踩的坑,后来花时间研究了几个小时算是搞明白了. 下边不多说直接上详细说明和demo 首先打开微信开发平台 微信 ...

最新文章

  1. 过去的一年,我在读研
  2. Linux进程间通讯之消息队列
  3. SqlSugar与Fluent NHibernate的性能测试对比
  4. ppk on javascript 笔记(五)
  5. php数据表格的重载,layui数据表格实现重载数据表格功能(搜索功能)
  6. [渝粤教育] 中国地质大学 面向对象程序设计 复习题 (2)
  7. 【iCore1S 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态
  8. linux发送数据包需要两次路由,linux – 在tracepath期间导致火星数据包(目前为止)的路由策略有多么破碎?...
  9. linux查看php命令目录权限,PHP执行linux命令mkdir权限问题
  10. sql 查询Africa城市的人口和城市名字
  11. 201671010129 2016—2017—2 《Java程序设计》Java总结
  12. 51单片机简谱音乐3-音阶与频率表问题以及简谱小笔记
  13. 统计学 常用的数据分析方法大总结,推荐收藏
  14. 多卡聚合设备 广电视频传输解决方案
  15. pycharm 拼音检查
  16. 相机变换AND正交投影AND透视投影
  17. 常用数列总结性质记录
  18. 2017安防摄像头技术发展趋势分析
  19. mysql5.7 1698 28000_MySqlError1698(28000)问题的解决方法
  20. Web Workers详解

热门文章

  1. 云计算机上存储的文件能删除吗,用户数据安全存储,华为云空间这些功能大显身手...
  2. 网线传输速度测试_网线测试参数说明
  3. 主成分分析法(PCA)及其python实现
  4. 2017-11-4—模拟PID电路(参考ADN8834datasheet)
  5. 【Spring】Spring中AOP解析 上 两种动态代理方式与ProxyFactory代理工厂
  6. 【算法基础九】致新手——计算机考研都需要准备什么?
  7. dentry 和inode
  8. 使用Refus制作系统U盘启动盘
  9. Linux高性能服务器开发——进程篇
  10. PowerDesigner安装教程(含下载+汉化+去试用)