草庐IT

微信小程序消息推送,实现未完成计划的在微信内的定时提醒功能

摸鱼小豆 2023-04-19 原文

微信小程序消息提醒(微信内提醒)

提示:此处仅是小程序消息提醒的一个小例子,希望能够为大家抛砖引玉

目录


需求及效果展示

在写一个计划类小程序的时候,需要实现一个计划的定时提醒功能,在查询完资料后依旧迷迷糊糊,所以查询官方文档进行探索,以下是我的初步探索结果,大家可以验证一下,然后先给出官方的最终效果,我们实现出来效果也是差不多的。


一、实现思路

首先先放出官方文档,大家点击查看,实现思路的话就是下面这里:

步骤一:获取模板ID

  • 设置模板就是告诉微信那边你发给用户的信息是长什么样的

步骤二:获取下发权限

  • 下发权限就是获取用户的允许了,不然别人随随便便就能给你微信推送消息,不得烦死

步骤三:调用接口下发订阅消息

  • 这里就是调用咯,我们的目的呗,然后这里提前说一下我们用的是云函数,会简单一点

提示:下面仅实现一次性订阅消息,长期订阅没有模板,需要审核时间

二、实现步骤

1.获取模板ID

这里的话按照官方的说法,跳到微信公众平台,然后登录你要下发消息的小程序,选订阅消息,点击选用,选一个模板,然后就和下图差不多了

这里我们就获取到了模板ID了,如果是第一次试,也可以和我选用一样的模板,避免一些非技术问题,然后我选的时候,只需要温馨提示和预计时间这两个,还有一个忘记是啥了我就没有选用,因为小程序不需要。
这里这个模板ID,和点击详情后的下面这个东西是有用的,这个我们下面来讲,先预告一波。

2.获取下发权限

重申:前面已经讲过我只实现其中一个思路,所以也不要问为啥不用其他的嘿
这里的话我们根据官方的说法,找到一次性订阅接口这里一些细节大家自行查看哈,我这里只讲请求参数和调用方法,首先先看文档:

这个地方就需要一个模板ID了,就是我们在第一步那里获取的模板ID,然后我们依照官方给的例子,写出代码:

  GetPermission(){
    wx.requestSubscribeMessage({
      tmplIds: ['用你自己获取的模板ID哈'],
      success: res => {
        console.log(res);
      }
    })
  }

这里写了一个GetPermission函数,然后参数就模板ID和返回成功的函数,这个函数点击之后就会弹框询问我们是否接受收到小程序的消息。这里我是加了按钮点击触发这个函数,这个太简单了,就不需要代码了吧。

【这里是题外话】然后这里给出一点解释,为啥官方那里的success是普通的函数形式我这里用箭头函数呢,实际上并没有影响,就是可能有些人会在调用成功的时候用到this.data.(不知道)的时候会报错说data不存在,这里的知识点是箭头函数里的this的指向和外面一致的知识点,所以讲一下,然后呢,这里的这个接口是promise风格调用,是异步的,所以,如果你不写success调用成果函数,而是在这个接口后面写代码的话是不会按顺序执行的,当然有人会说这个对于我们这个地方没有什么用,事实也是如此,我只是提一下,不喜可以跳过哈,然后关于箭头函数和promise的知识是es6的。

3.调用接口下发订阅消息

当你在点击确定之后,就已经获取了权限了(这里是一次性权限,每次发消息之前都要获取权限一次),然后我们回到官方文档,跳转到发送订阅消息接口,依旧我只提调用参数,其他细节大家自行查看(然后用的是云调用方式哈,大家往下滑):

这里参数就感觉搞得很头疼了,不过没关系,我们看一下官方给的例子,官方给的调用示例是很友好的,然后我们直接copy:

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {
  try {
    const result = await cloud.openapi.subscribeMessage.send({
        "touser": 'OPENID',
        "page": 'index',
        "lang": 'zh_CN',
        "data": {
          "number01": {
            "value": '339208499'
          },
          "date01": {
            "value": '2015年01月05日'
          },
          "site01": {
            "value": 'TIT创意园'
          },
          "site02": {
            "value": '广州市新港中路397号'
          }
        },
        "templateId": 'TEMPLATE_ID',
        "miniprogramState": 'developer'
      })
    return result
  } catch (err) {
    return err
  }
}

新建一个node.js云函数,替换代码,然后做修改,这个时候就可以再回去看参数列表了,首先第一个是接受消息的微信用户openId,第二个点击模板后跳转页面,就是类似于别人分享小程序给你,你点击进去后的第一个页面,语言不管,data是要对应模板的数据,这个我们一会讲,然后是模板ID,把我们第一步的模板ID填进去,最后是你的小程序是什么版本的,开发、体验还是正式,就按上面参数说的和实际情况填吧。
然后讲以下这个data,这个地方是需要按模板内容来写的,要怎么写呢,先看一下官方给的例子:

这里我们看第一个参数,模板上是姓名:{{name01.DATA}}
下面写的就是“name01”:{
“value”:“某某”
}
从这个看就可以看出规律,不好描述,我不讲了嘿,a然后我在第一步的时候让大家看了那个模板详细,有个信息,大家还记得嘛,就是这个:

那这样就可以改成我们的对应代码了:
sendMsg云函数:

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {

  try {
    const result = await cloud.openapi.subscribeMessage.send({
        "touser": '自己的openId',
        "page": '/pages/Cover/Cover',
        "lang": 'zh_CN',
        "data": {
          "thing3": {
            "value": '339208499'
          },
          "time1": {
            "value": '2015年01月05日'
          }
        },
        "templateId": '填上你自己的模板ID'
      })
    return result
  } catch (err) {
    return err
  }
}

然后这里因为我的小程序是正式版的,最后一个参数也是默认正式版的,所以我就不用写,大家在写的时候如果不是正式版记得写上,然后那个调用者openid因为是自己学习嘛,就直接写死自己的openId,就没有用参数的形式传进来,传参的话是event参数来传的。
然后大家调用一下这个云函数就可以啦:

  async sendMsg(){
    let rspMsg = new Promise(function (resolve,reject) {
      wx.cloud.callFunction({
        name:'sendMsg'//调用的云函数函数的名字,如果需要传参数用data
      }).then(res=>{
        resolve(res.result);
      })
    })
    let rep =  await rspMsg;
    //对rsp进行判断操作
    return rep;
  }

上面的代码是开发中用的,简化以下的话就是:

sendMsg(){
    wx.cloud.callFunction({
       name:'sendMsg'//调用的云函数函数的名字,如果需要传参数用data
     }).then(res=>{
     console.log(res);
     })
  }

总结

例如:以上是我的一些简单尝试,希望对大家有帮助,如果可以的话,可以点个赞支持一次哈,有问题的话可以在评论区中给出,然后如果可以的话请大家体验我的小程序悠卡花迹呀。不甚感激,目前才是初版,问题比较多。

有关微信小程序消息推送,实现未完成计划的在微信内的定时提醒功能的更多相关文章

  1. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  2. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  3. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

  4. ruby - 使用 Ruby 通过 Outlook 发送消息的最简单方法是什么? - 2

    我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=

  5. Ruby - 如何将消息长度表示为 2 个二进制字节 - 2

    我正在使用Ruby,我正在与一个网络端点通信,该端点在发送消息本身之前需要格式化“header”。header中的第一个字段必须是消息长度,它被定义为网络字节顺序中的2二进制字节消息长度。比如我的消息长度是1024。如何将1024表示为二进制双字节? 最佳答案 Ruby(以及Perl和Python等)中字节整理的标准工具是pack和unpack。ruby的packisinArray.您的长度应该是两个字节长,并且按网络字节顺序排列,这听起来像是n格式说明符的工作:n|Integer|16-bitunsigned,network(bi

  6. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  7. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  8. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  9. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  10. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

随机推荐