创建模版
微信公众平台中有很多 模版库,当然实际业务中 我们的模版是需要定制的,后台也给予了创建模版的功能
- 创建模版
- 获取模版id
- 配置模版 发送
具体的实现
大致操作流程 区分消息通知的类型: 1.实时推送 2.定时推送
实时推送
获取formid --》组合模版发送数据 --》调用推送api 获取formid 需要借助小程序的form表单提交 form 开启 report-submit="true" 绑定 bindsubmit 触发方法,表单的提交采用form中的 button 触发
代码如下
<form bindsubmit="postMsg" report-submit="true">
<button formType="submit">点击操作</button>
</form>
- formid 发送消息模版 两个限制,一次提交下发一次
- 收集的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"
}
}
}
注意点
- form_id: 接受人是谁,就用谁提交form产生的formid
- 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
定时推送
区别就在于,此服务依赖私人服务器定时推送操作,计时 到点推送消息模版,数据捕获与收集 拼接与实时发布操作完全相同