微信小程序具备模板消息功能,此功能能使开发者直接朝着用户推送重要通知,可是要将它运用得恰到好处并非易事,这其中涉及到开发环节,涉及到审核环节,还涉及到用户体验等多个环节。
基础接口的作用
其关键在于,小程序获取用户身份乃是通过用户登录接口得以达成的一种情况。开发者借助wx.login能够从中取得临时凭证,随后利用此临时凭证从服务器里面互换引出用户唯一标识。这一过程更是推送模板消息的前提条件所在,其缘由在于,每条消息都必然需要明确指定接收者这么一种要求。
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
if (res.code) {
// 发起网络请求
wx.request({
url: 'https://example.com/login',
data: {
code: res.code
},
success (res) {
// 处理返回的用户信息
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
小程序与后台服务器的数据交换,由网络请求接口wx.request负责。提交订单数据,或者获取用户列表,开发者得通过此接口来进行。该接口支持GET、POST等多种方法,它还是触发模板消息发送的核心途径。
模板消息的发送条件
// 发起一个GET请求
wx.request({
url: 'https://example.com/api/getData',
method: 'GET',
success: function(res) {
console.log(res.data);
}
});
// 发起一个POST请求
wx.request({
url: 'https://example.com/api/postData',
method: 'POST',
data: {
key: 'value'
},
success: function(res) {
console.log(res.data);
}
});
模板消息发送不能随意进行,其必须经由用户主动产生行为来触发,比如说,当用户提交表单或者完成支付之后,小程序才能够在七天的时间范围之内向该用户发送与之相关的通知,这样的一种限制起到了防止开发者滥发行为的作用。
一般而言,触发条件常常对应着特定的业务场景,于电商小程序当中而言,当用户支付成功的时候,便会触发发货通知模板,在预约类应用里,一旦用户确认预约时间,就会触发提醒模板,并且每个模板都得单独进行配置。
wx.requestPayment({
timeStamp: '', // 时间戳,从后端获取
nonceStr: '', // 随机字符串,从后端获取
templateId: '', // 模板ID,从后端获取
url: '', // 页面链接,从后端获取
data: {
'first': {
value: '尊敬的用户,您好!',
color: '#1aad19'
},
'keyword1': {
value: '活动名称',
color: '#1aad19'
},
'keyword2': {
value: '活动时间:2023-03-28 12:00',
color: '#1aad19'
},
'remark': {
value: '欢迎参加活动!',
color: '#1aad19'
}
},
success(res) {
// 成功
},
fail(err) {
// 失败
}
});
消息模板的申请与管理
try {
// 尝试执行网络请求
} catch (error) {
// 异常处理
if(error.message === '网络出错了') {
// 网络异常的处理逻辑
} else if(error.message === '用户拒绝授权') {
// 授权失败的处理逻辑
}
}
开发者得登录微信小程序后台,于模板库里挑选适宜的消息模板。要是不存在现成模板,能够申请去创建崭新的,不过一定要阐明用途以及字段含义,提交之后静候微信平台予以审核。
经过审核被通过之后,模板将会获取到唯一的ID。当开发者于小程序代码里调用发送接口之际,必定要使用这个ID。一旦模板标题以及内容字段审核通过了,就不可以进行修改,要是有变动的需求,那就只能重新去申请新的模板。
接口调用的具体步骤
传递模板消息主要借助wx.requestSendMessage接口来进行调用,开发者得去构造一个JSON对象,这个对象要涵盖模板ID,用户的openid,有目标跳转的页面路径以及与之对应的数据内容,并且数据内容必须和审核通过的模板字段进行严格的对应才行 。
成功调用接口之后,微信服务器会返回发送的结果,用户会于微信的“服务通知”当中看到这条消息,要是用户点击该消息,则能够跳转到小程序指定的页面,这给后续交互提供了入口 。
常见的错误处理
// 假设已经获取到模板ID为"template_id",用户OPENID为"user_openid"
let templateData = {
"first": { "value": "尊敬的用户,您好!", "color": "#173177" },
"keyword1": { "value": "123456", "color": "#173177" },
"keyword2": { "value": "2023-04-01", "color": "#173177" },
"remark": { "value": "点击下方链接查看交易详情", "color": "#173177" }
};
// 发送模板消息
wx.request({
url: 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN',
method: 'POST',
data: {
touser: "user_openid",
template_id: "template_id",
page: "",
data: templateData,
},
});
调用接口,有可能由于各种各样的原因致使其失败。常见的错误涵盖模板ID无效这种情况,还有用户已经取消关注这种状况,此外发送频率超限等也是常见的失误。微信会返回具体的错误码,像40037表明模板ID不正确,这就需要开发者去核对后台配置。
网络出现超时状况,或者服务器出现异常情形,这同样是较为常见的问题,开发者得在小程序前端设定合理的超时时间长度,并且要在后台做好日志记录工作,对于发送失败的消息,一般情况下建议放入重试的队列之中,不过要注意防止出现重复发送的情况。
优化推送效果的建议
wx.getUserProfile({
desc: '用于完善会员资料',
success: function(res) {
console.log(res.userInfo);
console.log(res逼近);
},
fail: function(err) {
console.error(err);
}
});
为了把消息点击率予以提升,能够对数据内容的可读性加以优化。比如说,于订单通知里让商品名称以及金额凸显出来,在预约提醒中把时间地点明确清楚。防止去运用用户不容易理解的内部编号或者代码,。
去定期剖析推送数据这件事也是具备相当重要性的,借助微信后台去查看消息的送达率,查看消息的打开率,查看消息的跳转率,以此来知悉用户各自的偏好,针对那些打开率偏低的模板而言,能够试着去调整发送的时机,或者是去精简相关内容,从而使得推送变得更为精准且有效 。
在你运用小程序期间,更期望接收到哪类样式的模板消息提示呢?是交易达成告知,还是服务进程刷新呢?
com.github.binarywang
weixin-java-mp
最新版本号
@Configuration
public class WeixinConfig {
@Bean
public WxMpService wxMpService() {
WxMpServiceImpl wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(getWxMpConfigStorage());
return wxMpService;
}
@Bean
public WxMpConfigStorage getWxMpConfigStorage() {
WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
configStorage.setAppId("你的小程序ID");
configStorage.setSecret("你的小程序密钥");
// 其他必要的配置...
return configStorage;
}
}