小程序 模版消息

719 阅读2分钟

创建模版

微信公众平台中有很多 模版库,当然实际业务中 我们的模版是需要定制的,后台也给予了创建模版的功能

  1. 创建模版
  2. 获取模版id
  3. 配置模版 发送

具体的实现

大致操作流程 区分消息通知的类型: 1.实时推送 2.定时推送

实时推送

获取formid --》组合模版发送数据 --》调用推送api 获取formid 需要借助小程序的form表单提交 form 开启 report-submit="true" 绑定 bindsubmit 触发方法,表单的提交采用form中的 button 触发

代码如下

<form bindsubmit="postMsg" report-submit="true">
    <button formType="submit">点击操作</button>
</form>
  1. formid 发送消息模版 两个限制,一次提交下发一次
  2. 收集的formid七天过期

数据拼接

调取服务端api获取 accesstoken 模版id 接受人的opendid

formdata:{
    openId:'xxxxxxxx',
    form_id:'接受人产生的formid',
    token:'xxxxxxxx'   
}
let MsgData = {
    "touser": formdata.openId,
    "template_id": formdata.templateId,
    "page": "pages/diaryPage/diaryPage?diaryid=28",
    "form_id": formdata.formid,
    "data": {
        "keyword1": {
            "value": "你有一条新的回复,点击查看"
        },
        "keyword2": {
            "value": "你在做什么。。"
        },
        "keyword3": {
            "value": "Ivan"
        },
        "keyword4": {
            "value": "2018-06-21 23:57"
        }
    }
}

注意点

  1. form_id: 接受人是谁,就用谁提交form产生的formid
  2. page的路径 按照例子写,很多人写 diaryPage?diaryid=28 ../diaryPage/diaryPage?diaryid=28 都是不可以的

调用推送api 因为api.weixin.qq.com无法配置安全域名,只能采用服务端进行代理转发

var postURL = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='+ formdata.token
wx.request({
    url: postURL, 
    data: MsgData,
    method:'POST',
    header: {
        'content-type': 'application/json'
    },
    success: function(res) {
        wx.showToast({
            title: '操作成功'
            icon: 'none',
            duration: 2000
        })
    }
})

formid 无效, 大部分问题产生原因为:form_id的提交人与信息接受人不一致

业务分析

很多业务场景 使用者 --》 触发通知 --》内容所有者

按照上面的发送 采用 form_id 服务器吐出 也就是form_id 我们需要提前收录

App({
    //收录 form id
    collecFormId:function(FormId){
        var that = this;
        var url = that.data.HOST + 'api/Users/SaveFormId?FormId='+FormId;
        wx.request({
            url: url, 
            method:'GET',
            header: {
                'content-type': 'application/json',
                'Authorization': "accessToken"
            },
            success: function(res) {
            }
        })
    },
})

调用:

const app = getApp()
app.collecFormId(FormId)

收录formid池子采用倒序插入,前台需要formid时候获取最新的,不管发送是否成功,直接消耗掉此次使用的formid

定时推送

区别就在于,此服务依赖私人服务器定时推送操作,计时 到点推送消息模版,数据捕获与收集 拼接与实时发布操作完全相同

PS 声明

如有任何错误或疑问,请留言,欢迎指正!