记录使用egg.js作小程序后台开发时遇到的一些问题
用户提交补签申请,由管理员审批后通过微信订阅消息发送审批结果通知。
注:主体为个人,只能使用一次性订阅,即用户授权一次,就可以向用户发送一次消息
根据自己的项目需求选择模板的内容,完成后我们需要注意几个内容:模板id、详细内容右边的对应的属性名
调用wx.requestSubscribeMessage接口,tmplIds值就是刚才申请的模板id,最后可以根据接口返回的信息判断授权情况。
wx.requestSubscribeMessage({
tmplIds: ['xxxxxxxxxxxxxx'],
success(res) {
console.log(res);
if (res.errMsg == 'requestSubscribeMessage:ok') {
wx.showToast({
title: '订阅成功'
})
} else {
wx.showToast({
title: '订阅失败'
})
}
}
})
用户每授权一次,后端就可以向用户发送一次订阅消息,时间不限。
根据文档解释,后端发送订阅消息需要有access_token,所以需要先调用getAccessToken接口获取access_token。
egg.js进行http请求可以使用curl,详细使用方法请看文档
let token = await this.ctx.curl('https://api.weixin.qq.com/cgi-bin/token', {
method: 'GET',
dataType: 'json', //※微信接口返回类型为text,我们转换为json方便后面获取token
data: {
appid: config.appid, //小程序appid
secret: config.secret, //小程序密钥
grant_type: 'client_credential'
}
})
let access_token = token.data.access_token
最后是发送订阅消息的接口subscribeMessage.send,我们通过文档可知它是个POST请求,但细心发现,刚才获取的access_token需要query的方式拼接在url后面,后面的参数则还是在body里,在实践开发中也确实如此。还有我们需要发送的数据信息应该是一个json值,官方提供的请求示例为:
{
"touser": "OPENID",
"template_id": "TEMPLATE_ID",
"page": "index",
"miniprogram_state":"developer",
"lang":"zh_CN",
"data": {
"number01": {
"value": "339208499"
},
"date01": {
"value": "2015年01月05日"
},
"site01": {
"value": "TIT创意园"
} ,
"site02": {
"value": "广州市新港中路397号"
}
}
}
可知他是一个多个结点对象的信息,然后每个data的属性对象应该要对应我们订阅消息内容的属性值,所以我们可以先手动转一下JSON,最后的代码应该为:
let dataJSON = JSON.stringify({
touser: user_id,
template_id: 'xxxxxxxxxxxxxx', //模板Id
data:{
thing6:{
value: title
},
time13:{
value: schedule_time
},
thing14:{
value: repair_info
},
phrase11:{
value: '审批通过'
},
}
})
let send = await this.ctx.curl('https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token='+access_token, {
method: 'POST',
dataType: 'json',
data: dataJSON
})
简单介绍下eggjs微信订阅消息的使用过程,重点就是在access_token和data那里,希望能对大家有所帮助,也是帮自己做一个笔记。