专栏首页达达前端微信小程序订阅消息功能

微信小程序订阅消息功能

小程序订阅消息

功能介绍

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

  • 订阅消息推送位置:服务通知
  • 订阅消息下发条件:用户自主订阅
  • 订阅消息卡片跳转能力:点击查看详情可跳转至该小程序的页面

使用说明

步骤一:获取模板 ID 步骤二:获取下发权限 详见小程序端消息订阅接口 wx.requestSubscribeMessage 步骤三:调用接口下发订阅消息 详见服务端消息发送接口 subscribeMessage.send

image.png

image.png

uni.requestSubscribeMessage({
  tmplIds: [''],
  success (res) { }
})
  • wx.requestSubscribeMessage(Object object)
  • subscribeMessage.send
<form :report-submit="true" @submit="createOrder" style="display: flex; justify-content: center;">
</form>

async createOrder(e) {
 try {
  await this.joinFormId(e) //收集formId
 }
}

payment(info) { //数字现金支付
let params = info.payment
  params.success = (res) => {
    // #ifdef MP-ALIPAY
    if (res.resultCode != 9000 && res.resultCode != 8000) {
      uni.showToast({
        title: '未支付押金成功!',
        icon: 'none'
      });
      return
    }
    // #endif
    uni.showLoading({
      mask: true,
      title: '正在处理...'
    });
    setTimeout(_ => {
      uni.hideLoading()
      this.goOrder(info.order_sn)
    }, 2000);
  }
  params.fail = (err) => {
    uni.showToast({
      title: '未支付押金成功!',
      icon: 'none'
    });
  }
  uni.requestPayment(params)
},
joinFormId(e) {
  return new Promise((resolve, reject) => {
    //#ifdef MP-WEIXIN
    var wechat_temp = this.$store.state.user.wechat_temp
    if (!wx.requestSubscribeMessage) {
      resolve()
      return
    }
    wx.requestSubscribeMessage({
      tmplIds: [wechat_temp.lend_success, wechat_temp.return_success],
      success: (res) => {
        console.log('res', res)
        const param = {
          is_lend: res[wechat_temp.lend_success] === 'accept' ? 1 : 0,
          is_return: res[wechat_temp.return_success] === 'accept' ? 1 : 0
        }
        if (param.is_lend || param.is_return) {
          resolve()
          subscribeAuthApi(param).then(response => {
            console.log('subscribeAuthApi', response)
          })
        } else {
          uni.showModal({
            content: '未授权发送通知,将收不到出借、归还通知',
            confirmText: '重新授权',
            cancelText: '直接租借',

            success: (res) => {
              if (res.confirm) {
                reject()
                this.request_order = false
                this.createOrder()
              } else {
                resolve()
              }
            }
          })
        }
      },
      fail: (err) => {
        console.log('ee', err);
        uni.showModal({
          content: '未授权发送通知,请到小程序设置界面开启订阅',
          confirmText: '去开启',
          cancelText: '直接租借',
          success: (res) => {
            if (res.confirm) {
              reject()
              wx.openSetting()
            } else {
              resolve()
            }
          }
        })
      }
    })
    //#endif
    //#ifdef MP-ALIPAY
    console.log('MP-ALIPAY')
    const form_id = e.detail.formId
    if (form_id.indexOf(' ') !== -1) {
      return
    }
    joinFormIdApi({
      form_id
    })
    resolve()
    //#endif
  })

},

image.png

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html

用户需要点击“总是保持以上,不再询问”,才可以获取到getSetting返回的用户授权信息

image.png

requestMsg(){
 return new Promise((resolve, reject) => {
 wx.requestSubscribeMessage({
 tmplIds: [" -ZwAFL- "],
 success: (res) => {
  if (res[' -ZwAFL- '] === 'accept'){
  wx.showToast({
  title: '订阅OK!',
  duration: 1000,
  success(data) {
  //成功
  resolve()
  }
  })
  }
 },
 fail(err) {
  //失败
  console.error(err);
  reject()
 }
 })
 })
 }
openMsg() {
    var that = this
    // 获取用户的当前设置,判断是否点击了“总是保持以上,不在询问”
    wx.getSetting({
        withSubscriptions:true,  // 是否获取用户订阅消息的订阅状态,默认false不返回
       success(res) {
          if(res.authSetting['scope.subscribeMessage']) { // 用户点击了“总是保持以上,不再询问”
             uni.openSetting({ // 打开设置页
               success(res) {
                 console.log(res.authSetting)
               }
             });
          }else { // 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
             var templateid = that.setting.templateid.map(item => item.tempid)
             uni.requestSubscribeMessage({
               tmplIds: templateid,
               success (res) {
                  console.log(res)
               },
               fail:(res) => {
                  console.log(res)
               }
             }) 
          }
       }
    })
},

模版消息链接 fromid怎么成这样了

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

image.png

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • uni-app 图片上传实战

    uni.uploadFile() 将本地资源上传到开发者服务器 客户端发起一个post请求 content-type

    达达前端
  • 第83节:Java中的学生管理系统分页功能

    分页功能一般可以做成两种,一种是物理分页,另一种是逻辑分页。这两种功能是有各自的特点的,物理分页是查询的时候,对数据库进行访问,只是查一页数据就进行返回,其特点...

    达达前端
  • 第78节:Java中的网络编程(上)

    网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节.

    达达前端
  • uni-app 图片上传实战

    uni.uploadFile() 将本地资源上传到开发者服务器 客户端发起一个post请求 content-type

    达达前端
  • python代理ip检测

    kirin
  • 谈谈架构:设计与原则

    芋道源码
  • netty 的ByteBuf的一则问题

    问:在ByteBuf这个地方的描述,内存管理是使用的操作系统层的内存管理方式,包括之前这个地方 也提到了,一部分内存是在堆外的内存,不是在gc堆中,是否可以理解...

    开发架构二三事
  • “腾讯云 · 开发者实验室“体验

    偶然间从腾讯云 · 云+社区的实验室标签点进去,居然就发现了新大陆!

    LoveTech
  • 5个最优秀的微信小程序UI组件库

    开发微信小程序的过程中,选择一款好用的组件库,可以达到事半功倍的效果。自从微信小程序面世以来,不断有一些开源组件库出来,下面5款就是排名比较靠前,用户使用量与关...

    一斤代码
  • 在线教育风口已来,这几个开源项目不能错过 | Gitee 项目推荐

    由于疫情严重,全国学生全部推迟了开学时间,但是停课不停学,许多学校都已经开始了线上课程。对于线上教育行业来说,这也是一次发展壮大的机会。线上教育想要积累稳定的客...

    掌上编程

扫码关注云+社区

领取腾讯云代金券