参考文档:
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/template-message.html#模板消息管理
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/template-message/templateMessage.send.html
模板消息
微信6.5.2及以上版本支持
基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验。
模板下发条件:用户本人在微信体系内与页面有交互行为后触发,
步骤一:获取模板 ID
有两个方法可以获取模板 ID:
通过模板消息管理接口获取模板 ID在微信公众平台手动配置获取模板 ID
登录 https://mp.weixin.qq.com 获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用
步骤二:页面的 form 组件,属性 report-submit 为 true 时,可以声明为需要发送模板消息,此时点击按钮提交表单可以获取 formId,用于发送模板消息。或者当用户完成 支付行为,可以获取 prepay_id 用于发送模板消息。
步骤三:调用接口下发模板消息
使用效果
下发条件说明
1. 支付
当用户在小程序内完成过支付行为,可允许开发者向用户在7天内推送有限条数的模板消息(1次支付可下发3条,多次支付下发条数独立,互相不影响)
2. 提交表单
当用户在小程序内发生过提交表单行为且该表单声明为要发模板消息的,开发者需要向用户提供服务时,可允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发1条,多次提交下发条数独立,相互不影响)
templateMessage.send
本接口应在服务器端调用,详细说明参见服务端API。
本接口支持云调用。需开发者工具版本 >= 1.02.1904090(最新稳定版下载),wx-server-sdk >= 0.4.0
发送模板消息
调用方式:
HTTPS 调用云调用
HTTPS 调用
请求地址
POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN
请求参数
属性类型默认值必填说明
access_tokenstring 是接口调用凭证touserstring 是接收者(用户)的 openidtemplate_idstring 是所需下发的模板消息的idpagestring 否点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。form_idstring 是表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_iddataObject 否模板内容,不填则下发空模板。具体格式请参考示例。emphasis_keywordstring 否模板需要放大的关键词,不填则默认无放大
返回值
Object
返回的 JSON 数据包
属性类型说明
errcodenumber错误码errmsgstring错误信息
errcode 的合法值
值说明最低版本
40037template_id不正确 41028form_id不正确,或者过期 41029form_id已被使用 41030page不正确 45009接口调用超过限额(目前默认每个帐号日调用限额为100万)
请求示例
{
"touser": "OPENID",
"template_id": "TEMPLATE_ID",
"page": "index",
"form_id": "FORMID",
"data": {
"keyword1": {
"value": "339208499"
},
"keyword2": {
"value": "2015年01月05日 12:30"
},
"keyword3": {
"value": "腾讯微信总部"
} ,
"keyword4": {
"value": "广州市海珠区新港中路397号"
}
},
"emphasis_keyword": "keyword1.DATA"
}
返回示例
{
"errcode": 0,
"errmsg": "ok"
}
云调用
云调用是小程序·云开发提供的在云函数中调用微信开放接口的能力,需要在云函数中通过 wx-server-sdk 使用。
接口方法
openapi.templateMessage.send
需在 config.json 中配置 templateMessage.send API 的权限,详情
请求参数
属性类型默认值必填说明
touserstring 是接收者(用户)的 openidtemplateIdstring 是所需下发的模板消息的idpagestring 否点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。formIdstring 是表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_iddataObject 否模板内容,不填则下发空模板。具体格式请参考示例。emphasisKeywordstring 否模板需要放大的关键词,不填则默认无放大
返回值
Object
返回的 JSON 数据包
属性类型说明
errCodenumber错误码errMsgstring错误信息
errCode 的合法值
值说明最低版本
0成功
异常
Object
抛出的异常
属性类型说明
errCodenumber错误码errMsgstring错误信息
errCode 的合法值
值说明最低版本
40037template_id不正确 41028form_id不正确,或者过期 41029form_id已被使用 41030page不正确 45009接口调用超过限额(目前默认每个帐号日调用限额为100万)
请求示例
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
try {
const result = await cloud.openapi.templateMessage.send({
touser: 'OPENID',
page: 'index',
data: {
keyword1: {
value: '339208499'
},
keyword2: {
value: '2015年01月05日 12:30'
},
keyword3: {
value: '腾讯微信总部'
},
keyword4: {
value: '广州市海珠区新港中路397号'
}
},
templateId: 'TEMPLATE_ID',
formId: 'FORMID',
emphasisKeyword: 'keyword1.DATA'
})
console.log(result)
return result
} catch (err) {
console.log(err)
return err
}
}
返回示例
{
"errCode": 0,
"errMsg": "openapi.templateMessage.send:ok"
}