微信小程序 实现模板消息群发、发送给指定用户

最近在做一款拼课类小程序,大概需求就是分享课程页面给好友,好友参与达到一定数量后则拼课成功。
按理说很平常的需求,微信公众号里边应该很容易实现,但是想在小程序里边实现这么个功能却有点蛋疼了。
为什么小程序实现起来比较费劲呢,那就要说下小程序发送模板消息的机制了,先看文档怎么说:
划重点, 本人 、 交互 ,也就是说这个模板消息,必须由用户手动来触发,你想后台定时给用户推个消息,洗洗睡吧你。
再来看下面:
这个重点你们自己划吧,发模板消息必须满足这两种情况中的一种,支付就不说了,用户付款后可以推送几条消息,重点是这个 表单提交 。
意思就是我想给用户发个模板消息,第一要搞个表单,第二要让用户来提交这个表单(获取formId),而且这个模板消息还只能发给提交表单的用户本人,你想发给别的用户,呵呵。
好了,说多了都是气,既然这样设计,也是有一定道理,但是道理都是讲给守规矩的人听的,至于不守规矩的,喂!说的就是你。
通过上面的分析我们知道,想发送一个基本的模板消息需要以下步骤:
模板消息接口 POST
有这么几个参数 :
前面扯了一堆概念,下面我们来把这个功能具体的实现一遍吧,我这里后台用的是php laravel,原理都一样。
我这只写一个例子,一看就明白
有些时候用户操作频繁,可能会导致服务器收到大量请求,所以可以优化下,把formId先存到一个全局变量里边(数组),当达到一定数量后统一发给后台来保存。这块可以灵活运用。
服务端的实现也就两个功能, 收集 和 发送 。
假设我们现在有这么一个类FormIdCollection,可以收集(save)和获取(get)某个openid的formId,那我们给前台暴露的api只需要简单的调用下就可以了,至于发消息,也只需要get一个formId,即可。
下面是FormIdCollection类的一个具体实现,基于laravel(说实话,挺好用的),另外引入了一个微信开发包 overtrue/wechat (这里主要是用来发模板消息、有点大材小用了),
/
我已经封装了一个laravel扩展包,感兴趣的朋友可以上github上看下
。
至于非框架的php实现,小伙伴可以帮忙弄下。
小程序使用公众号模板推送消息

由于小程序只能发送订阅消息,消息类型如下:
一次性订阅消息
一次性订阅消息用于解决用户使用小程序后,后续服务环节的通知问题。用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。(发一次消息要用户授权一下,可以同时授权多条消息提醒,但每次也只发一遍。)
长期订阅消息
一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。
目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。(即使你是这些行业,也需要使用申请模板去微信那边申请。)
1、公众号和小程序需要在同一个微信开放平台下,保证拿到相同的UnionID
2、如果需要在消息模板上加上小程序的入口,需要微信公众号和小程序做关联
3、小程序和公众号都必须是认证过的
4、小程序需要提前知道公众号的appid和appsecret
5、发送消息之前需要拿到用户对应于公众号的openid(这个要前期规划好获取方案)
微信公众号会在2021-04-30发文对消息模板做限制,想要做成和小程序订阅消息一样的模式,不知道最终会调整成什么样子。
微信小程序订阅消息调研

小程序订阅消息功能于2019年10月9日发布的小程序基础库2.9.0版本中发布,原来使用的模板消息功能将于
2020年1月10日下线!2020年1月10日下线!2020年1月10日下线!
意味着2020年1月10日起商家要给小程序用户推送消息,必须使用 订阅消息功能 来替代,原来的模板消息将无法使用了!!!
在订阅消息介绍文档中,官方介绍说消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。
经过几天的吐血体验,简而言之可以将模板消息到订阅消息功能的变化概括为一句话:
将接收消息的权利交给用户,将发送消息的权利交给商家。
为什么说将接收消息的权利交给用户呢?
众所周知,根据微信小程序模板消息规则,商家则可在不经用户同意的情况下,在限定时间内向用户发起限定条数的消息。比如原来使用模板消息支付完成后商家可在7天内发送3条模板消息给用户;而使用订阅消息后,只有用户同意订阅此类消息,才会收到此消息,否则该消息将不会强制通知给用户。
如何理解将发送消息的权利交给商家呢?
这是由于原来的模板消息限制有时间和数量限制,而订阅消息没有时间限制,数量上也只区分一次性和长期消息,当用户允许一次性消息则可发送一次订阅消息,如果用户总是允许接收消息则可不受时间和条数限制的发送此类消息给用户。比如原来使用模板消息,用户完成一次支付后,商家在7天内只允许发送3条模板消息给用户;而使用订阅消息后,如果用户允许一次性订阅此类消息,会收到一次性消息提醒,如果用户勾选总是允许接收此类消息,则可长期不受限制的推送多条此类支付状态模板消息给用户。
但需注意:在一次订阅中,点击“总是保持以上选择,不再询问”+“允许”之后,只能收到一条消息通知。 勾选总是,只是在下次调用的时候帮你默认做出选择,还是需要调用了这个才能收到消息,而不是做出一次选择后就高枕无忧了。官方文档也没有写明确,有点坑...
而且,用户点击“总是保持以上选择,不再询问”+“取消”之后,可以在设置中打开权限,但是还是需要触发wx。
正是通过将接收消息的权利交给用户,将发送消息的权利交给商家,这样两次权利的释放,实现微信小程序服务的闭环和为用户带来更优的体验。
A、按照使用场景可以分为两类消息:
一类是用户发给小程序的消息,比如客户咨询消息、留言提醒消息等。这一类消息一般是用户主动联系商家,商家为客户提供客服等服务;
另一类是商家(小程序)推送给用户的消息,比如到货提醒、物流发货提醒等。这一类消息可以使商家主动触达用户,方便商家维护客户,达到用户留存和促进活跃等目的。另外,可以看出小程序做一次性订阅消息,并不希望小程序消息泛滥,打扰用户,从而维护了良好的用户体验。
B、按照微信小程序官方消息分类:
订阅消息推送位置是在服务通知中,当用户收到订阅消息,该消息会出现在手机顶部通知栏中,可点开查看,也可进入微信App,点开微信服务通知中查看。推送成功结果如下图:
目前订阅消息还很不完善,官方文档对于很多限制没有明确说明,比如不能一次触发同时申请订阅超过3个模板消息。对于同一种消息,用户订阅次数是否有上限,官方没有说明,初步判断是不限的。
小程序订阅消息开发指南
微信小程序订阅消息踩坑初体验