评论

微信小程序订阅消息汇总,持续跟进中

微信小程序订阅消息


最近在搞微信小程序订阅消息,遇到不少的坑,这篇文章的初衷就是帮忙开发者少踩坑,业务能快速对接订阅消息。


也欢迎开发者私聊我,咱们一起维护这个列表。


下面有部分内容是从@拾忆和@Jianbo摘取的,如有侵权,联系我,我来删除。


官方文档

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html


订阅消息体验踩坑@拾忆

https://developers.weixin.qq.com/community/develop/article/doc/000e22321b8ef0b9bc491ae9c53c13


小程序订阅消息开发指南@Jianbo

https://developers.weixin.qq.com/community/develop/article/doc/00026407d58cf07bb96941b0e5b813


开发者需要关注的点

1.如果不勾选红色方框内的内容,用户每次触发订阅消息功能都会弹出授权窗口,如果用户勾选了则不会出现弹窗。

2.微信不会为开发者保存订阅次数,需要自己在后台记录用户触发的次数。超过次数调用接口下发订阅消息会返回失败。

3.发送模板格式和原来的模板消息格式不一致,特别是data内的内容,订阅消息的字段key是和数据类型有关,value的参数需要严格按照设置的类型提交,具体使用参考后台的模板详情。

4.长期订阅消息只针对特定行业开放,所以普通开发者并无法使用。

5.用户是否勾选总是保持以上选择,不再询问,这个对开发者透明

6.测试环境如果勾选总是保持以上选择,就不会在弹出来,如果进入设置页关闭,也不会弹出来。有一个骚操作,就是去后台将订阅消息模板删除,重新新建一个,就会生成一个新的模板id,就能进行测试了

7.允许和拒绝的回调返回errMsg是一样的


低版本说明

1.基础库2.8.2 版本才开始支持,用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。

2.微信版本:一次调用最多可订阅3条消息(注意:iOS客户端7.0.6版本、Android客户端7.0.7版本之后的一次性订阅/长期订阅才支持多个模板消息,iOS客户端7.0.5版本、Android客户端7.0.6版本之前的一次订阅只支持一个模板消息)消息模板id在[微信公众平台(mp.weixin.qq.com)-功能-订阅消息]中配置


使用的两种方式

1.点击行为,不能嵌套在form组件

2.支付回调,可以wx.requestPayment回调里使用


可参考的产品

1.luckin微信小程序,在支付之前体验

2.青柠单车小程序,扫码就能体验


bug


错误码

1.43101用户拒绝接受消息,如果用户之前曾经订阅过,则表示用户取消了订阅关系


changeLog

1.2019-12-31 20:00:目前订阅消息不支持跳开发版,我们会尽快优化解决

2.2020-01-02 12:55:微信开放平台,向非api方式注册的小程序添加订阅消息,小程序类目不符合订阅消息类目,添加不了,需要手动到微信后台设置类目

3.2020-01-02 19:00 新版订阅消息IOS手机bug,直接返回之后就不会在弹窗了,微信7.0.9版本已解决https://developers.weixin.qq.com/community/develop/doc/00008a645500e88023b9341fc51c

4.2020-01-06 15:00 小程序订阅消息弹出样式是系统默认的,目前开发者不允许修改

5.2020-01-071510 小程序订阅消息的相关接口频次上限是多少(当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制。当账号粉丝数超过10W/100W/1000W时,模板消息的日调用上限会相应提升,以公众号MP后台开发者中心页面中标明的数字为准。https://developers.weixin.qq.com/community/develop/doc/00084455e7c068058ab9db8d656800

6.2020-01-08 11:30 微信支付成功从A页面进入B页面,微信版本 7.0.8,页面切换时,订阅消息弹窗不显示了。微信版本7.0.9没有这个问题;后续会修复

最后一次编辑于  2020-02-16  
点赞 7
收藏
评论

21 个评论

  • |G.XIAO|
    |G.XIAO|
    2019-12-31

    欢迎大家把自己遇到的坑写到评论里,我会定期更新到文章里。么么哒😘

    2019-12-31
    赞同 2
    回复
  • huyuming
    huyuming
    2020-03-15

    const cloud = require('wx-server-sdk')

    cloud.init()

    const { OPENID } = cloud.getWXContext()

    const TMPID = 'HmIgKsB2VZUif9EYZLeqn9X15xHlQQG45QJnmZCNNQI'

    exports.main = async (event, context) => {

      try {

        const result = await cloud.openapi.subscribeMessage.send({

          touser: OPENID,

          page: 'page/cloud/pages/scf-openapi/scf-openapi',

          lang: 'zh_CN',

          data: {

            thing1: {

              value: '英语学习'

            },

            thing2: {

              value: '每天背20个单词'

            },

            thing3: {

              value: '记得多喝水'

            }

          },

          templateId: TMPID,

          miniprogramState: 'trail'

        })

        console.log(result)

        return result

      } catch (err) {

        console.log(err)

        return err

      }

    }

    这是我在云函数中的代码,前端调用后可以弹窗,点允许后却并没有收到任何消息?请问一下是openid的问题吗?我就是想发给点击的用户,直接用小程序获取的openid是对的吧?还有别的原因么?

    2020-03-15
    赞同 1
    回复 2
    • |G.XIAO|
      |G.XIAO|
      2020-03-16
      云函数没有接触过,非常抱歉
      2020-03-16
      回复
    • huyuming
      huyuming
      2020-03-21回复|G.XIAO|
      外建服务器的方式还可以正常使用订阅消息吗?总觉得是微信在限制小客户使用此功能!?
      2020-03-21
      回复
  • Maple 🍁
    Maple 🍁
    2020-08-19

    请问,用户如果订阅了消息,比如一个商品用户下单通知卖家。

    第一次商品下单了,但是用户取消订单,用户再次下单的时候就无法再次 推送用户下单通知。这个问题有办法解决么? 还是目前只能引导去公众号用公众号的消息推送。

    2020-08-19
    赞同
    回复 1
    • |G.XIAO|
      |G.XIAO|
      2020-08-19
      用户再次下单的时候就无法再次 推送用户下单通知,这个有具体错误信息吗?如果用户没有拒绝,原则上是可以推送的
      2020-08-19
      回复
  • 丢了坚强以后
    丢了坚强以后
    2020-07-18

    你好,有个点还是没整明白,就是推送给用户之后,用户点击了那条消息跳转到微信小程序的路径可以配置吗?

    2020-07-18
    赞同
    回复 2
    • |G.XIAO|
      |G.XIAO|
      2020-07-19
      可以配置,这个是服务端在推送是配置的跳转路径
      2020-07-19
      回复
    • 。
      2020-09-10
      那前端怎么获取数据呢
      2020-09-10
      回复
  • 得闲饮茶
    得闲饮茶
    2020-05-19

    问题:小程序有两个页面都是可以订阅的,到时间才发送订阅消息,第一个用户选择允许订阅,第二个用户选择取消订阅,第二个时间比第一个时间先到触发通知,用户是能收到通知,而允许订阅的第一个页面,用户则收不到消息,因为微信返回了{"errcode":43101,"errmsg":"user refuse to accept the msg hint: [5HC8MA0921d437]"}用户取消订阅,这能怎么解决?

    2020-05-19
    赞同
    回复 6
    • |G.XIAO|
      |G.XIAO|
      2020-05-19
      两个页面的订阅是同一个模板id吗?如果是的话,是不是可以通过记录用户是否订阅的状态,如果在1个页面订阅过,另外1个页面就不要展示了
      2020-05-19
      回复
    • 得闲饮茶
      得闲饮茶
      2020-05-19回复|G.XIAO|
      两个页面是不同商品但是是同一个模板id,小程序订阅消息功能似乎是记录用户订阅的次数,比如我订阅A,取消订阅B,小程序似乎是记录我订阅了一次,所以如果是B产品先于A产品发送通知的话,我能收到B产品的通知,但因为我的订阅次数用完,所以A产品发送通知就会提示用户拒绝
      2020-05-19
      回复
    • |G.XIAO|
      |G.XIAO|
      2020-05-19回复得闲饮茶
      是这样的,对于微信来说,它们不关心具体的商品,关心是功能,后端服务器推送数据,微信接收到后,给用户发服务通知。

      针对这样的场景,可以这样做:
      方案1:2个商品使用不同的模板id,这样会浪费模板数据,能解决你说的问题(A、B时序)
      方案2:模板内容通用一些,不要涉及到具体的商品,引导用户打开微信小程序,只有进入小程序在展示具体的商品
      2020-05-19
      回复
    • 得闲饮茶
      得闲饮茶
      2020-05-19回复|G.XIAO|
      这边做的是抢购商品提前通知功能,商品的模板id是一样的,而且得告知用户他预购的商品信息,所以会涉及具体商品信息,A和B都不适合,现在的临时方案是记录用户订阅的状态,然后定时脚本里面判断该商品里面用户列表有订阅的就发送通知, 没订阅就没发送
      2020-05-19
      回复
    • |G.XIAO|
      |G.XIAO|
      2020-05-19回复得闲饮茶
      定时脚本里面判断该商品里面用户列表有订阅,这个是如何判断的
      2020-05-19
      回复
    查看更多(1)
  • 她来听我的演唱会
    她来听我的演唱会
    2020-04-13

    嗯,我也补充一下:

    1.就是用户授权的时候,不管是点了“允许”还是“取消”,后续要更改授权状态,无法进行更改操作;

    2.最大的问题就是一对一的模式,也就是说点击订阅一次,然后授权成功回调调用方法发送订阅消息;但是有的业务需要的是主动推送,比如用户订阅了降价提醒,订阅了开盘提醒,如果没有主动推送的话,真的很不方便;只能是用模板消息,但是小程序模板消息不能用了,改用公众号的模板消息吧的话,又需要用户关注公众号!所以只能是自己写websocket消息推送了?


    2020-04-13
    赞同
    回复 7
    • |G.XIAO|
      |G.XIAO|
      2020-04-14
      非常棒
      2020-04-14
      回复
    • |G.XIAO|
      |G.XIAO|
      2020-04-14
      .就是用户授权的时候,不管是点了“允许”还是“取消”,后续要更改授权状态,无法进行更改操作;这个不太理解
      2020-04-14
      回复
    • |G.XIAO|
      |G.XIAO|
      2020-04-14
      问题2的痛点,我们现在也遇到了,还没有更好的解决方案。当用户关闭了微信小程序,WebSocket推送也无法触达用户吧
      2020-04-14
      回复
    • 她来听我的演唱会
      她来听我的演唱会
      2020-04-14回复|G.XIAO|
      嗯,主要就是主动推送,希望微信能出的订阅消息——
      1.用户可以更改授权状态;
      2.用户一旦授权成功,如果是只允许一次,那么商家不能主动推送;如果用户点击了“不再提示”,那么就视为长期授权,商家可以主动推送,如果因为消息打扰到用户,又回到1。
      2020-04-14
      回复
    • |G.XIAO|
      |G.XIAO|
      2020-04-15回复她来听我的演唱会
      嗯嗯,是这样的,我们可以通过 getSetting 获取到用户是否勾选保持以上选
      2020-04-15
      回复
    查看更多(2)
  • 豆浆丶油条
    豆浆丶油条
    2020-03-06

    支付订阅在跳转前订阅?

    2020-03-06
    赞同
    回复 1
    • |G.XIAO|
      |G.XIAO|
      2020-03-07
      支付订阅在支付成功时机调用;如果你们业务支付成功不跳转,就在当前页面。如果调整就在调整后的页面
      2020-03-07
      回复
  • 仅此丶而已。
    仅此丶而已。
    2020-02-26

    我用小程序体验版订阅消息,后台服务发送消息 返回的OK,但是微信服务通知里确没有收到消息?

    string Url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+ token;

                    var postdata = new

                    {

                        touser = openId,

                        template_id = templeteId,

                        page = "pages/index/index",

                        data = new

                        {

                            thing1 = new

                            {

                                value = "今日行程"

                            },

                            date2 = new

                            {

                                value = "2020-02-20"

                            },

                            thing4 = new

                            {

                                value = "请做好准备,即将出发"

                            }

                        }

                    };

                    wenXinResult = HttpHelper.HttpPostJson(Url, JsonHelper.Serialize(postdata), false);

    wenXinResult 里返回的是成功!服务通知里确没有收到消息,请教下这是什么原因呢?



    2020-02-26
    赞同
    回复 1
    • |G.XIAO|
      |G.XIAO|
      2020-02-26
      服务通知里确没有收到消息,这个是推送你自己的还是其他用户
      2020-02-26
      回复
  • 马农™
    马农™
    2020-02-24
    5.2020-01-071510 小程序订阅消息的相关接口频次上限是多少(当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制。当账号粉丝数超过10W/100W/1000W时,模板消息的日调用上限会相应提升,以公众号MP后台开发者中心页面中标明的数字为准。https://developers.weixin.qq.com/community/develop/doc/00084455e7c068058ab9db8d656800
    

    针对这条有一些疑问:

    1. 小程序订阅消息的相关接口指的是拉取模板列表、对消息模板的增删改接口?包括subscribeMessage.send(https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html) 这个接口吗?后者我看文档里写的额度是至少1kw/日,但实际上进行消息推送时,观察服务端日志发现消息已推送成功({"errcode":0,"errmsg":"ok"})但用户却没有收到。我们目前的每日订阅消息推送量在20w上下。
    2. 当账号粉丝超过。。。 这段是针对公众号后台推送的,跟小程序没关系吧?


    2020-02-24
    赞同
    回复
  • 子凯
    子凯
    2020-02-21

    弹出订阅消息授权框需要用户点击,如果我有一个列表A,点一个list进入B详情页面,点击的时候调用授权可以吗?这种逻辑怎么处理??

    2020-02-21
    赞同
    回复 1
    • |G.XIAO|
      |G.XIAO|
      2020-02-21
      我们只需要定义好触发时机,剩下的事情就是微信框架在处理
      2020-02-21
      回复

正在加载...

登录 后发表内容