往小程序能发送消息吗?答案肯定是能的。
开通消息发送功能进入微信公众平台,设置,开通小程序消息发送权限
配置消息发送模板微信公众平台有三种消息推送方式
1、 开发者服务器接收消息推送
2、 云函数接收消息推送
3、微信云托管服务接收消息推送。
现在我们要看的是第一种。开发者服务器接收消息推送
开发者服务器接收消息推送消息能力是小程序重要组成部分,我们为开发者提供了订阅消息的能力,以便实现服务的闭环和更优的体验。
订阅消息推送位置: 服务通知
订阅消息下发条件: 用户自主订阅
订阅消息卡片跳转能力: 点击查看详情或可跳转到小程序的页面
1、 先定义一个消息模板。
如下图,在微信公众平台订阅一个消息模板,用来定义消息的格式。我已经订阅成功了一个,具体步骤,可自行百度。
图1
2、获取小程序用户的openId
过程略,可百度
3、获取access_token.
access_token 是小程序全局唯一的后台接口调用凭据,调用大多数后台接口时都需使用。开发者可以通过getAccessToken接口获取并进行妥善保存。
为了access_token的安全性,后端API不能直接在小程序内通过wx.request调用,即api.weixin.qq.com不能被配置为服务器域名。开发者应在后端服务器使用getAccessToken获取access_token.
过程略
上边条件具备之后,开始整理发送消息到小程序上的内容
发送消息到小程序下面就要调用小程序官方提供的发送消息的接口了。先看一下官方文档
图2
第一步,要引导用户授权,能够允许接收消息, 如图1.
下边是弹出授权消息的小程序代码
confirmMsg: function(e){
wx.getSetting({
withSubscriptions: true, // 这里设置为true,下面才会返回mainSwitch
success: function(res){
let tmplIds = 'UblTSmgV_clnIbj5JT6tkbkFDCDSWHtX-dGazbtf9DE'
// 调起授权界面弹窗
if (res.subscriptionsSetting.mainSwitch) { // 用户打开了订阅消息总开关
if (res.subscriptionsSetting.itemSettings != null) { // 用户同意总是保持是否推送消息的选择, 这里表示以后不会再拉起推送消息的授权
let moIdState = res.subscriptionsSetting.itemSettings[tmplIds]; // 用户同意的消息模板id
if(moIdState === 'accept'){
console.log('接受了消息推送');
}else if(moIdState === 'reject'){
console.log("拒绝消息推送");
}else if(moIdState === 'ban'){
console.log("已被后台封禁");
}
}else {
// 当用户没有点击 ’总是保持以上选择,不再询问‘ 按钮。那每次执到这都会拉起授权弹窗
wx.showModal({
title: '提示',
content:'请授权开通服务通知',
showCancel: true,
success: function (ress) {
if (ress.confirm) {
wx.requestSubscribeMessage({ // 调起消息订阅界面
tmplIds: [tmplIds],
success (res) {
wx.request({
url: 'http://localhost:9090/pro_api/test/sendOneUser/{openId}',
method: 'post',
data: {
}
})
},
fail (er){
console.log("订阅消息 失败 ");
console.log(er);
}
})
}
}
})
}
}else {
console.log('订阅消息未开启')
}
},
fail: function(error){
console.log(error);
},
})
},
第二步, 用户授权允许后,调用后台java接口,生成消息内容,发送到微信平台,并通知小程序用户。
RestTemplate restTemplate = new RestTemplate();
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" getAccesToken();
WxMssVo msgVo = new WxMssVo();
msgVo.setTouser(openId);
msgVo.setTemplate_id(template_id);
msgVo.setPage("pages/index/index");
Map<String, TemplateData> m = new HashMap<>();
m.put("thing1", new TemplateData("title content"));
m.put("name4", new TemplateData("杭州"));
m.put("date3", new TemplateData("2022年11月22日"));
m.put("thing2", new TemplateData("content1"));
m.put("thing8", new TemplateData("content2"));
msgVo.setData(m);
log.debug("msg content: {}", msgVo);
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, msgVo, String.class);
String resMsg = responseEntity.getBody();
log.info("get Message Result: {}", resMsg);
return resMsg;
只要小程序端允许获取消息,并调用上边接口,根据微信用户的openId,发送到小程序用户,即可成功。
第三步,展示效果
图3
大功告成,往小程序上发送消息成功。
注意的问题消息模板定义,除非你是学校等公立的机构主体,才能订购长期订阅的模板,其他只能订购一次性模板。
图4
第二个问题,在往微信平台发送消息内容时,需注意发送的内容有限制,否则会被校验出来,提示各种invalide date, invalide name等,无法发送,需按照下边注意一下即可。
图5
好了,基本就这些。
,Copyright © 2008-2022 秒下下载站
m.down10s.com .All Rights Reserved