Appearance
微信小程序模板消息
1、前端代码
收集 formid
html
<form report-submit="true" className="cu-footer" onSubmit="{this.handlePay}">
<button form-type="submit" className="mainbtn topay">
去支付
</button>
</form>
js
fly.post('gatherFormId', {
formId: e.detail.formId,
});
收集 formID 存到数据库中,可以无限发送消息。
2、后端代码
获取 access_token 传入小程序 APPID 和 小程序 secret
js
const getAccessToken = () =>
new Promise((resolve, reject) => {
fly
.get(
`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${config.appId}&secret=${config.secret}`,
)
.then((res) => {
console.log('请求哈哈哈');
console.log(res.data);
resolve(res.data);
})
.catch((err) => {
reject(err);
});
});
js
/**
* 发送模板消息
*/
async sendTemplateMsg(param) {
const page =
param.type === 'course'
? `pages/course/myDetail?id=${param.orderId}`
: `pages/order/detail?id=${param.orderId}`;
let opts = {
touser: param.openId, //用户openID
template_id: param.template_id, //小程序后台申请的id
form_id: param.formId, //收集的formID
page,
data: {
keyword1: {
value: param.orderId //根据申请的模板消息,对应的keyword1输入value值, (订单ID)
},
keyword2: {
value: param.price //价格
},
keyword3: {
value: param.time //下单时间
},
keyword4: {
value: '待支付'
},
keyword5: {
value: param.title
},
keyword6: {
value: '请在30分钟内支付完成'
}
}
};
//发送模板消息
await fly
.post(
`https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=${
param.accessToken
}`,
opts
)
.then(res => {
const result = JSON.parse(res);
if (result.errcode == '0' && result.errmsg === 'ok') {
this.logger.info('模板消息发送成功');
console.log('模板消息发送成功');
} else {
this.logger.info('模板消息发送失败');
console.log('模板消息发送失败');
}
})
.catch(error => {
console.log('失败了');
console.log(error);
});
}
3、无限发送模板消息
fromId 发送一次就失效了,而且有时效限制 7 天。
那么我们可以收集用户更多的 formId,并设置失效时间。
每次使用的时候,先过滤删除掉已经失效的 formID。
js
async usableFormId() {
const nowTime = +new Date();
//去除过期的formId
await this.ctx.model.FormId.remove({ expire: { $lte: nowTime } });
const formIds = await this.ctx.model.FormId.find().lean();
return removeRepeatArrObj(formIds); //去重筛选出openID和formID
}
然后在筛选出可以的数据,openId 和 formId 。
循环发送模板消息,就做到了无限制发送!