一、微信小程序模板消息说明
二、发送模板消息流程
自己实现的功能主要是发货后给用户发送模板消息的功能。首先在小程序后台配置模板,然后,在用户提交订单的时候利用form表单,把formid和订单数据传给后端,然后后端一起保存到数据库订单表中。发货后,调用小程序发送模板接口进行模板消息下发就可以了。(这里需要注意:formid有7天的有效时间,所以发货通知需在7天之内进行通知,否则无效)
主要的nodejs代码:
/*
* 小程序发送模板消息
* */
var express = require('express');
var app = express();
var request = require('request');
var appId = '自己的小程序appid';
var appSecret = '自己的小程序APPsecret';
app.get('/getformid',function(req,res){
//res.send('hello world!!!')
var code = req.query.code;
var formid = req.query.formid;
console.log(formid)
request('https://api.weixin.qq.com/sns/jscode2session?appid='+appId+'&secret='+appSecret+'&js_code='+code+'&grant_type=authorization_code',function(error,response,body){
if(!error && response.statusCode === 200){ //通过前端传过来的code获取openID
console.log(body,'获取openID返回的信息')
var bodyJson = JSON.parse(body);
//获取access_token
request('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='+appId+'&secret='+appSecret,function(error2,response2,body2){
if (!error2 && response2.statusCode == 200) {
console.log(body2,'获取access_token返回的数据')
var bodyJson2 = JSON.parse(body2);
var requestData = {
touser: bodyJson.openid, //要通知的用户的openID
form_id: 1540380591153, //保存的form_id,因为编辑器无法获取到,只能真机测试才可以,所以只能从真机测试后拿过来写死
template_id: "EVKZI7sq4vuEh_b0kmi--RiCC_ib_RAikRO_dadnmCU", //模板id
data: { //要通知的模板数据
"keyword1": {"value":"2018-10-24"},
"keyword2": {"value":"顺丰"},
"keyword3": {"value":"28orudfs0808uosdufou"},
"keyword4": {"value":"发货通知成功,闪开,我要开始装逼了"}
}
};
request({ //调用接口进行模板消息发送
url: 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='+bodyJson2.access_token,
method: 'POST',
json: true,
headers: {
"content-type": "application/json",
},
body: requestData,
},function(error3,response3,body3){
if (!error3 && response3.statusCode == 200) {
console.log(body3,'发送消息返回的参数')
}
})
}
})
}
})
})
var server = app.listen(8087,function(){
var host = server.address().address;
var port = server.address().port;
console.log('应用实例,访问地址为http://%s:%s',host,port)
})
这里因为是自己做的一个demo,所以,前端还需要调用wx.login把code发送到后端,然后后端通过调用微信的接口code2Session来获取用户的openID,然后通过调用getAccessToken接口,获取到accesstoken后就可以调用发送模板消息接口sendTemplateMessage发送消息了。
这里的formid写死是因为,在编辑器上无法获取到formid,会提示"the formId is a mock one",只能从真机上测试获取,而自己的node文件又是跑在pc端的本地,手机上测试无法调用接口,所以只能从手机上获取后,然后写死测试。
结果: