app中实现服务通知可以通过消息推送机制实现,而基于微信的通知渠道,小程序想要实现服务通知推送,需要借助模版消息。参考小程序官方API模版消息使用说明, 颜值招聘小程序选用了在微信公众平台手动配置获取模版ID,在后台添加了所需要的个人模版库,如下:

接下来便是收集formId,因为是自定义消息模版,收集的前提有2个:
1、页面需要使用<form></form>组件,且设置 report-submit=“true”
2、<form></form>组件中需包含button组件,且设置 formType="submit"
换句话说,收集formId是依靠需发模版消息的form表单,将按钮动作响应为表单提交,并从提交动作获取的。所以在项目中,定义好的按钮点击事件出发,按照这个原则构建页面和代码逻辑,将收集到的formId传给服务端保存起来,等待相应事件触发时向对应用户下发服务通知。
举个例子:职位页面报名时收集formId
/*wxml*/
<form bindsubmit="btnClicked" report-submit="{{true}}">
<view class="fixed-white-bgView">
<button class="btn" formType="submit" disabled="{{disabled}}">{{bottomBtnName}}</button>
</view>
</form>
//点击底部报名/结束报名按钮
btnClicked: function (event) {
console.log("formId:", event.detail.formId) //模拟其打印时:
this.data.formId = event.detail.formId
if (this.data.canClick) {
this.data.canClick = false
if (!this.data.isMine) {
//报名
this.signUp()
} else {
//结束报名
this.closeJob()
}
}
},
//报名
signUp: function () {
var that = this
if (app.globalData.userInfo.resume_id == "" || app.globalData.userInfo.resume_id == "0") {
//没做简历
this.showNoResumeModel()
return;
}
//调服务器报名接口,上传formId
common.http(signUpUrl, 'POST', {
"job_id": that.data.jobInfo.id,
"formId": that.data.formId
}, function (res) {
if (res.data.ok == 1) {
wx.showToast({
title: '报名成功'
})
that.setData({
bottomBtnName: '已报名',
disabled: true,
'jobInfo.enroll_list': res.data.data.enroll_list
})
} else {
console.log("报名失败:", res.data.msg)
if (res.data.ok == 140) {
that.showResumeFailModel()
} else {
that.data.canClick = true
wx.showToast({
title: res.data.msg,
icon: 'none'
})
}
}
}, function (res) {
that.data.canClick = true
})
}
注意:模拟器打印时formId: the formId is a mock one,真机上打印如下:

另外关于通过模版消息管理接口获取模版ID可以参考官网API介绍自行调用。
Tip:
收集formId的2个必要条件要切记,缺一不可,否则无法收集到formId。
网友评论