大拇指知识分享!欢迎光临!
我们一直在努力!

微信小程序消息订阅怎么打开(关闭小程序订阅功能)

往小程序能发送消息吗?答案肯定是能的。

开通消息发送功能

进入微信公众平台,设置,开通小程序消息发送权限

配置消息发送模板

微信公众平台有三种消息推送方式

1、 开发者服务器接收消息推送

2、 云函数接收消息推送

3、微信云托管服务接收消息推送。

现在我们要看的是第一种。开发者服务器接收消息推送

 开发者服务器接收消息推送

消息能力是小程序重要组成部分,我们为开发者提供了订阅消息的能力,以便实现服务的闭环和更优的体验。

订阅消息推送位置: 服务通知

订阅消息下发条件: 用户自主订阅

订阅消息卡片跳转能力: 点击查看详情或可跳转到小程序的页面

1、 先定义一个消息模板。

如下图,在微信公众平台订阅一个消息模板,用来定义消息的格式。我已经订阅成功了一个,具体步骤,可自行百度。

2、获取小程序用户的openId

过程略,可百度

3、获取access_token.

access_token 是小程序全局唯一的后台接口调用凭据,调用大多数后台接口时都需使用。开发者可以通过getAccessToken接口获取并进行妥善保存。

为了access_token的安全性,后端API不能直接在小程序内通过wx.request调用,即api.weixin.qq.com不能被配置为服务器域名。开发者应在后端服务器使用getAccessToken获取access_token.

过程略

上边条件具备之后,开始整理发送消息到小程序上的内容

发送消息到小程序

下面就要调用小程序官方提供的发送消息的接口了。先看一下官方文档

第一步,要引导用户授权,能够允许接收消息, 如图1.

下边是弹出授权消息的小程序代码

confirmMsg: function(e){

    wx.getSetting({
      withSubscriptions: true,   //  这里设置为true,下面才会返回mainSwitch
      success: function(res){   

        let  tmplIds = 'UblTSmgV_clnIbj5JT6tkbkFDCDSWHtX-dGazbtf9DE'
        // 调起授权界面弹窗
        if (res.subscriptionsSetting.mainSwitch) {  // 用户打开了订阅消息总开关
          if (res.subscriptionsSetting.itemSettings != null) {   // 用户同意总是保持是否推送消息的选择, 这里表示以后不会再拉起推送消息的授权
            let moIdState = res.subscriptionsSetting.itemSettings[tmplIds];  // 用户同意的消息模板id
            if(moIdState === 'accept'){   
              console.log('接受了消息推送');

            }else if(moIdState === 'reject'){
              console.log("拒绝消息推送");

            }else if(moIdState === 'ban'){
              console.log("已被后台封禁");

            }
          }else {
          	// 当用户没有点击 ’总是保持以上选择,不再询问‘  按钮。那每次执到这都会拉起授权弹窗
            wx.showModal({
              title: '提示',
              content:'请授权开通服务通知',
              showCancel: true,
              success: function (ress) {
                if (ress.confirm) {  
                  wx.requestSubscribeMessage({   // 调起消息订阅界面
                    tmplIds: [tmplIds],
                    success (res) {

                      wx.request({
                         url: 'http://localhost:9090/pro_api/test/sendOneUser/{openId}',
                        method: 'post',
                        data: {
                          
                        }
                      })
                    },
                    fail (er){
                      console.log("订阅消息 失败 ");
                      console.log(er);
                    }
                  })     
                        
                }
              }
            })
          }

        }else {
          console.log('订阅消息未开启')
        }      
      },
      fail: function(error){
        console.log(error);
      },
    })
  },

第二步, 用户授权允许后,调用后台java接口,生成消息内容,发送到微信平台,并通知小程序用户。

    RestTemplate restTemplate = new RestTemplate();
        String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+getAccesToken();

        WxMssVo msgVo = new WxMssVo();
        msgVo.setTouser(openId);
        msgVo.setTemplate_id(template_id);
        msgVo.setPage("pages/index/index");

        Map<String, TemplateData> m = new HashMap<>();
        m.put("thing1", new TemplateData("title content"));
        m.put("name4", new TemplateData("杭州"));
        m.put("date3", new TemplateData("2022年11月22日"));
        m.put("thing2", new TemplateData("content1"));
        m.put("thing8", new TemplateData("content2"));

        msgVo.setData(m);

        log.debug("msg content: {}", msgVo);
        ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, msgVo, String.class);
        String resMsg = responseEntity.getBody();
        log.info("get Message Result:  {}", resMsg);
        return resMsg;

只要小程序端允许获取消息,并调用上边接口,根据微信用户的openId,发送到小程序用户,即可成功。

第三步,展示效果

大功告成,往小程序上发送消息成功。

注意的问题

消息模板定义,除非你是学校等公立的机构主体,才能订购长期订阅的模板,其他只能订购一次性模板。

第二个问题,在往微信平台发送消息内容时,需注意发送的内容有限制,否则会被校验出来,提示各种invalide date, invalide name等,无法发送,需按照下边注意一下即可。

好了,基本就这些。

赞(0)
未经允许不得转载:大拇指知识 » 微信小程序消息订阅怎么打开(关闭小程序订阅功能)
分享到: 更多 (0)

评论 抢沙发

9 + 1 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

大拇指知识!

联系我们联系我们