参考文档:
1. https:// developers.weixin.qq.com /miniprogram/dev/api-backend/open-api/template-message/templateMessage.send.html
2. https:// developers.weixin.qq.com /miniprogram/dev/component/form.html
一、需求
其实我已经实现过,通过 prepay_id 给用户发送模板消息。
也就是用户在支付之后,我们会获得一个 prepay_id,然后我们就可以通过这个 prepay_id 给用户发送三次模板消息。
但是现在出现了一个需求:小程序中有他人代付的功能,故最终收到发货通知的不是收货人。
二、解决方案
收集 form_id 也可以给用户发送模板消息。
(详见参考文档 2)
如何收集 form_id
首先是 表单组件 form 的使用,我们可以看下视图层(WXML)代码:
<form bindsubmit="formSubmit" report-submit>
<button formType="submit">Submit</button>
</form>
逻辑层(JS)代码:
Page({
formSubmit: function (e) {
console.log('formId:', e.detail.formId)
}
})
UI 界面:
获取 form_id:
三、如何设计一个可以一直给用户发消息的程序架构
form_id 的使用限制:
- form_id 七天有效
- form_id 只能使用一次
- form_id 只能被小程序已登录用户使用
根据上述需求,得出下面的设计:
1、找到用户最高频次使用的按钮,将其改造成可以获取到 form_id 的形式
2、将 form_id 上传到后端数据库,下列是数据表设计:
FormId 表:
objectId - String //主键
user - Pointer : _User // 指向用户表
formId - String // 用户上传的 form_id
createdAt - Date // 创建时间
isUsed - 是否被使用 // 是否已被使用
3、当后台需要使用 form_id 时,建立查询条件
function getFormId(userId){
return new Promise(async (resolve,reject)=>{
// 查询 FromId 表
// 查询条件1:user 为传入的用户 Id
// 查询条件2:isUsed 为 false
// 查询条件3:createdAt 与 现在相差7天以内
// 排序条件:按 createdAt 升序排列
// 返回值:列表的第一个,这样可以保证一直用的是时间最久远的那个
})
}