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

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

问题描述

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

解决思路

原本做这个功能我用到两个表,一个是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–
有不明白的或者有更好解决方案的欢迎留言讨论

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要实现服务微信小程序用户发送模板消息,需要使用微信公众平台提供的模板消息接口。以下是使用PHP实现的步骤: 1. 获取access_token 首先需要获取access_token,可以通过向以下接口发送GET请求获取: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 其中APPID和APPSECRET分别为服务的AppID和AppSecret。 2. 获取小程序用户的openid 在向小程序用户发送模板消息之前,需要获取用户的openid。可以通过使用小程序提供的登录接口获取用户的openid,具体方法可以参考小程序开发文档。 3. 发送模板消息 获取用户的openid之后,就可以向用户发送模板消息了。发送模板消息的接口为: https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN 其中ACCESS_TOKEN为第一步获取的access_token。 发送模板消息的数据格式为: { "touser":"OPENID", "template_id":"TEMPLATE_ID", "page":"index", "form_id":"FORMID", "data":{ "keyword1":{ "value":"VALUE1" }, "keyword2":{ "value":"VALUE2" } }, "emphasis_keyword":"keyword1.DATA" } 其中: - touser为接收消息的小程序用户的openid; - template_id为模板消息的ID,可以在公众平台后台的模板库中查找; - page为小程序的页面路径,可以不填; - form_id为小程序的form_id,可以在小程序端通过wx.requestPayment等接口获取; - data为模板消息中需要替换的变量; - emphasis_keyword为模板消息中需要进行高亮的关键字。 具体的数据格式可以参考微信公众平台的文档。 以上是使用PHP实现服务微信小程序用户发送模板消息的基本步骤。需要注意的是,为了保证模板消息能够正常发送,需要先在公众平台后台的模板库中添加对应的模板,并且设置好模板消息中需要替换的变量。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值