概念:模板消息。
发送位置:服务通知
发送条件:支付或者触发表单提交
发送链接:
POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN
参数(七个):
access_token,
page,
template_id,
formId,如果是支付就写prepay_id,如果是 表单就写formid
touser(接受者的openid),
data(模板中的数据)数组
emphasis_keyword,需要放大的值
实现的效果:如果是表单触发或者是支付触发就按照正常的流程来走发送服务通知消息模板。
如果我们要主动给用户发送给用户,这个要怎么实现?
解决方案:我们把formId和用户绑定在一起存入数据库,当用的时候取出来使用即可,那么存储formId成为了重中之重,如何存储formId呢?formId只能由前台触发表单操作生成,因此要将前台的formId和用户id发送到后台,PHP接受formid和用户信息绑定存到数据库。但是这样的话formId容易存储无限个,因此要在后台判断是否一致(formId有七天的有效期),一旦过去,formId就会失效。
1.触发表单提交index.wxml:
<form bindsubmit="form" report-submit='true' >
<button form-type="submit" class='xx'>
<text>123</text>
</button>
</form>
2.index.js
Page({
data: {
openid: "",
session_key: "",
access_token: "",
},
onLoad: function (options) {
var that = this
//第一步获取openid
wx.login({
success: function (data) {
console.log(data.code, data)
console.log("12345");
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session',
data: {
appid: "你的appid",
secret: "小程序秘钥",
js_code: data.code//wx.login获取到的code
},
method: "post",
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
success: function (res) {
console.log(res);
that.setData({
openid: res.data.openid,
session_key: res.data.session_key,
})
}
})
}
})
//第二步 获取access_token
wx.request({
url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的appid&secret=你的小程序秘钥',
method: "GET",
success: function (res) {
console.log("xxx");
console.log(res);
that.setData({
access_token: res.data.access_token,//获取到的access_token
})
}
})
},
form: function (e) {
console.log(e);
var that = this;
var fId = e.detail.formId; // 网络请求
var l = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' + that.data.access_token;
var d = {
touser: that.data.openid, //用户的openid
template_id: '模板消息ID',
page: '/pages/index/index',
form_id: fId,
data: { //模板消息要对应 有几个写几个 避免为空模板
"keyword1": {
"value": "酒店",
"color": "#4a4a4a"
},
"keyword2": {
"value": "2018-03-22",
"color": "#9b9b9b",
},
"keyword3": {
"value": "$300",
"color": "#9b9b9b"
},
"keyword4": {
"value": "中国",
"color": "#9b9b9b"
},
},
color: '#ccc',
emphasis_keyword: 'keyword1.DATA'
}
wx.request({
url: l,
data: JSON.stringify(d),
method: 'POST',
success: function (res) {
console.log(res);
},
fail: function (err) {
console.log(err);
}
});
},
})
扩展:如何一次获取50个formId呢?