微信模板推送消息,是用来给用户通知一些业务消息的,但是有时候也用它作为批量消息,下发给用户:
批量下发这个动作官方是不建议这样的,还是尽量少操作
在操作过程中,比如说下发1万条相同的消息,通过循环执行之后,查询日志,发现了问题:
成功率特别低,而且大部分推送报错:errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest hint
接下来就是头疼的排查问题过程:
一、首先按照回执信息,提示意思是说我的access_token已经失效了。
那好,我就重新生成一个最新token,继续批量执行了一遍,不过还是报错
这次的报错是比较有规律的,成功一个,然后错误十几个,再成功一个,这样循环。
那么基本可以排除我的access_token问题了,因为有成功,有失败,而且使用的都是同一个token
二、那么,第二个猜想就是推送接口是不是有频率限制
从原来的循环执行,改写为1秒钟执行一条推送,但是依然会遇到间隔失败的情况
继续去看了看官方文档,对于模板推送的频率说明上是说:没有限制的
综上,可以排除官方频率限制了
三、加入随机字符串,来填充内容
第三猜想是觉得一模一样的内容批量推送,会不会被官方认为滥用借口,采取限流?
然后给推送内容加入了一个随机字符串的东西,让每一条信息都有一个编码,这样的话,每一条消息都是独一无法的
改写推送流程,发送……
查看日志,成功了!
解决办法如下:
给推送模板的内容里面,加入一个随机字符串即可,例如这个函数:
uniqid();
这样的话,不管什么频率的请求,都是百分百成功的!
注意:慎用该功能,如果被大量用户举报,会有封号的风险。