模板消息 ======== 功能概述 ----------- 使用 wx-js-utils 接口发送统一服务消息 本文主要介绍模板消息功能,它类似一个访客预约系统,当用户预约成功后,下发一条消息,这条消息可以是单纯的小程序模板消息,如果小程序与公众号进行了关联,那么也可以使用统一服务消息,按需发送小程序的模板消息或是公众号的模板消息。 体验功能 ----------- .. image:: https://main.qcloudimg.com/raw/c3bffdddfa54ecd95b5a569b10f71840.png 体验 DEMO ----------- 本章的案例代码,请参考 代码 `tcb-demo-basic `_ 。 DEMO 接入流程 ------------------ 1. 使用小程序登录微信公众平台,选择【访客登记通知】 > 【消息模板】。 添加通知到个人模板库,记录模板 ID,供后续使用。 .. image:: https://main.qcloudimg.com/raw/3e6445ef6f583409dd577242ff70eff0.png 2. 在小程序公众号平台, 选择【设置】>【开发设置】,找到开发者密码(AppSecret) ,记录密码供后续使用。 .. image:: https://main.qcloudimg.com/raw/2e5b9c342bd2bb1bce772cf4a6767ae7.png 3. 在公众号平台登录小程序绑定的公众号。 a. 在【首页】>【功能】>【添加功能】插件里选择模板消息,添加成功后,等待公众平台审核,审核通过后才能开始使用。 b. 审核通过后,选择【来访申请提醒】模板,搜索结果列表中编号为 OPENTM410586240 ,添加提醒到个人模板库后,记录其 ID 供后续使用。 .. image:: https://main.qcloudimg.com/raw/eb9918c9ec5dd8e7839fa803309fc3e9.png 4. 在公众号管理平台,选择【开发】>【基本配置】里找到开发者 appId ,记录 appId 供后续使用。 .. image:: https://main.qcloudimg.com/raw/2cd31c0c5b4dc5d38e5aeb5726f6f54e.png 5. 请按以下步骤操作: - 首先在 cloud/functions 目录下,找到 send-message 云函数。 - 其次在其根目录下新建 config 目录,复制 example.js 到 config 下,并改名为 index.js 。 - 再而将上面收集保存的信息分别填入对应字段,内容如下所示。 - 然后上传并安装云函数依赖。 .. code:: js module.exports = { weappSecret: '', // 小程序 secret ID weappTemplateId: '', // 小程序模板消息 ID mpAppId: '', // 公众号 appid mpTemplateId: '' // 公众号模板消息 ID } 6. 打开云控制台,选择【数据库】>【添加集合】 ,新建一个名为 `reserves` 的集合。 以上步骤全部完成后,您就可以编译预览体验本 `demo` 了。 源码介绍 ------------------ 自定义消息模板 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 发送模板消息,首先需要在模板库里选择对应的模板,并按需选择所需字段。 如果模板库中已有模板不能满足业务需求,您可以自己定义后提交审核,审核通过后即可选择使用。 使用 wx-js-utils 发送模板消息 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 官方的发送模板消息 API 如下所示:: POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN 具体的参数请参考 `小程序开发文档 `_ 。 使用 `wx-js-utils` 封装方法,如下所示: .. code:: js const wxMiniUser = new WXMINIUser({ appId, secret }); const access_token = await wxMiniUser.getAccessToken(); const wxMiniMessage = new WXMINIMessage({ openId, formId, templateId }); return wxMiniMessage.sendMessage({ access_token, data, page }); 您只需要关注发布的消息内容即可。 统一服务消息 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 统一服务消息既可以发送小程序的模板消息,如有公众号与之绑定,则它也可以发送公众号模板消息, 此时只需要提供公众号的一些配置即可,详细的参数请查看 `DEMO `_ 代码。 通过消息发送的公众号推送消息,单击可以跳转到小程序页面,为小程序访问提供便利的入口。 .. note:: 发送公众号模板消息也需要提前在公众号管理平台选择模板消息。 官方发送统一服务消息 API ,如下所示:: POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN 具体的参数请参考 `小程序开发文档 `_ 。 利用小程序发送绑定公众号的消息模板,必须是当前小程序已上线,不然接口始终会报如下错误。 .. code:: json {"errcode":40165,"errmsg":"invalid weapp pagepath hint: [uQN5tA0640shc2]"} 使用 wx-js-utils 接口发送统一服务消息 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 主要代码如下所示: .. code:: js const { WXMINIUser, WXUniformMessage, } = require('wx-js-utils'); const { touser, appId, secret, weapp_template_msg, mp_template_msg } = event const wxMiniUser = new WXMINIUser({ appId, secret }); const access_token = await wxMiniUser.getAccessToken(); const wxUniformMessage = new WXUniformMessage(); return wxUniformMessage.sendMessage({ access_token, touser, weapp_template_msg, mp_template_msg }); `weapp_template_msg` 和 `mp_template_msg` 的关系,两者都有。 - 发送 `weapp_template_msg` 代表的小程序模板消息。 - `weapp_template_msg` 不存在而 `mp_template_msg` 存在时,则发送公众号模板消息。