简介
基础流程
- 用户登录 :获取微信提供的openid
- 开发者去微信公众平台申请模板:获得模板id
- 授权消息推送:在小程序中调用wx.requestSubscribeMessage方法
- 成功后将数据保存到后台 消息推送表 中
- 在需要发送消息推送时:查询 消息推送表 如果有,使用 消息推送表 的数据调用接口subscribeMessage.send
实际流程
1.1用户微信登录(缓存opid)
1.2用户普通登录(无opid)
2 消息推送申请
2.1用户授权
2.1.1无opid(弹框要求 微信登录(类似第一步)
2.1.2有opid(继续
2.2获得了授权的模板id和opid
3传输到后台,后台存储到消息推送表,参数:模板id,opid,用户名称,身份证。默认参数:是否发送为N,创建时间,主键 ,发送时间为空
4后台定时器,查询到要发送的用户时,查询消息推送表,修改发送状态为Y,更新发送时间,然后发送微信小程序消息推送
代码
1用户微信小程序登录
wx.login({
success: res => {
console.log(res);
// 发送 res.code 到后台换取 openId, sessionKey, unionId
request.post('后台用小程序id和密钥获取Openid的接口.do', {
code: res.code
}).then((res) => {
console.log(res);
let result = JSON.parse(res.result);
wx.setStorageSync('openid',result.openid)//缓存openid
that.setData({
sessionKey: result.session_key
})
});
}
})
2 消息推送授权
let templateId = '模板id';
wx.requestSubscribeMessage({
tmplIds: [templateId],
success (res) {
console.log(res);
if(res.模板id =='reject'){//被拒绝
}else{//同意
//获取缓存的openid,可能是之前用户登录时存放的
let opid = wx.getStorageSync('openid');
//如果有OPID,直接发送
if(opid){
//执行保存到后台的操作
that.saveSubMssage(opid,templateId);
}else{
wx.showToast({
title: '需要关联微信账号',
icon: 'success',
duration: 2000
})
//和登录授权一样
wx.login({
success: res => {
console.log(res);
// 发送 res.code 到后台换取 openId, sessionKey, unionId
request.post('后台的接口', {
code: res.code
}).then((res) => {
//得到openid
let result = JSON.parse(res.result);
wx.setStorageSync('openid',result.openid)
opid=res.openid;
//执行保存到后台的操作
that.saveSubMssage(opid,templateId);
});
}
})
}
}
},
error(res){
console.log(res);
wx.showToast({
title: '授权出现错误',
icon: 'none',
duration: 2000
})
}
})
saveSubMssage(openid,tmplIds){
let that = this;
request.Post('后台保存消息推送的接口.do', {
openId: openid,//用户openid
templateId: tmplIds,//模板id
userName: encodeURI(that.data.userName),//中文乱码处理
idCard: that.data.idCard//身份证
}).then((res) => {
console.log(res);
wx.showToast({
title: '授权成功',
icon: 'success',
duration: 2000
})
//退出页面
setTimeout(function() {
wx.navigateBack({ changed: true });
}, 2000);
});
3 后台发送推送信息
public static boolean sendNearRemindMessage(String openId,String serveName,String windowName,String lineNumber,String waitNumber,String msg) throws Exception {
WxMaSubscribeMessage subscribeMessage = new WxMaSubscribeMessage();
//跳转小程序页面路径
subscribeMessage.setPage("pages/index/index");
//模板消息id
subscribeMessage.setTemplateId(WxMaConfiguration.templateId);
//给谁推送 用户的openid (可以调用根据code换openid接口)
subscribeMessage.setToUser(openId);
//==========================================创建一个参数集合========================================================
ArrayList<WxMaSubscribedata> wxMaSubscribedata = new ArrayList<>();
// 订阅消息参数值内容限制说明
// ---摘自微信小程序官方:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
// 参数类别 参数说明 参数值限制 说明
// thing.DATA 事物 20个以内字符 可汉字、数字、字母或符号组合
// number.DATA 数字 32位以内数字 只能数字,可带小数
// letter.DATA 字母 32位以内字母 只能字母
// symbol.DATA 符号 5位以内符号 只能符号
// character_string.DATA 字符串 32位以内数字、字母或符号 可数字、字母或符号组合
// time.DATA 时间 24小时制时间格式(支持+年月日) 例如:15:01,或:2019年10月1日 15:01
// date.DATA 日期 年月日格式(支持+24小时制时间) 例如:2019年10月1日,或:2019年10月1日 15:01
// amount.DATA 金额 1个币种符号+10位以内纯数字,可带小数,结尾可带“元” 可带小数
// phone_number.DATA 电话 17位以内,数字、符号 电话号码,例:+86-0766-66888866
// car_number.DATA 车牌 8位以内,第一位与最后一位可为汉字,其余为字母或数字 车牌号码:粤A8Z888挂
// name.DATA 姓名 10个以内纯汉字或20个以内纯字母或符号 中文名10个汉字内;纯英文名20个字母内;中文和字母混合按中文名算,10个字内
// phrase.DATA 汉字 5个以内汉字 5个以内纯汉字,例如:配送中
WxMaSubscribedata wxMaSubscribedata1 = new WxMaSubscribedata();
wxMaSubscribedata1.setName("thing1");
wxMaSubscribedata1.setValue(serveName);
wxMaSubscribedata.add(wxMaSubscribedata1);
WxMaSubscribedata wxMaSubscribedata2 = new WxMaSubscribedata();
wxMaSubscribedata2.setName("thing6");
wxMaSubscribedata2.setValue(windowName);
wxMaSubscribedata.add(wxMaSubscribedata2);
WxMaSubscribedata wxMaSubscribedata3 = new WxMaSubscribedata();
wxMaSubscribedata3.setName("character_string2");
wxMaSubscribedata3.setValue(lineNumber);
wxMaSubscribedata.add(wxMaSubscribedata3);
WxMaSubscribedata wxMaSubscribedata4 = new WxMaSubscribedata();
wxMaSubscribedata4.setName("number3");
wxMaSubscribedata4.setValue(waitNumber);
wxMaSubscribedata.add(wxMaSubscribedata4);
WxMaSubscribedata wxMaSubscribedata5 = new WxMaSubscribedata();
wxMaSubscribedata5.setName("thing5");
wxMaSubscribedata5.setValue(msg);//"快到您了,请关注窗口和叫号情况"
wxMaSubscribedata.add(wxMaSubscribedata5);
//把集合给大的data
subscribeMessage.setData(wxMaSubscribedata);
//=========================================封装参数集合完毕========================================================
try {
System.out.println(JsonUtil.toJSONString(subscribeMessage));
//获取微信小程序配置:
final WxMaService wxService = WxMaConfiguration.getMaService(WxMaConfiguration.appid);
//进行推送
wxService.getMsgService().sendSubscribeMsg(subscribeMessage);
return true;
} catch (Exception e) {
e.printstacktrace();
System.out.println(e.toString());
}
return false;
}
4 微信maven
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>3.6.0</version>
</dependency>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。