微信小程序java后端开发记录(三):模板消息推送
·模板消息推送
1.1推送参数dto:
按照文档逐层次封装请求参数。
这些参数
/*** @author hanyy* @Description: 微信小程序模板消息推送参数* @date 2019/8/18 10:52*/
public class WechatAppletTemplateDTO {private String touser;private String template_id;private String page; // 跳转小程序页面private String form_id; //表单提交场景下为formid,支付场景下为prepay_idprivate Map<String, WechatAppletTemplateItemDTO> data;private String emphasis_keyword; // 需要放大的关键字,如:keyword1.DATA
}
1.2小程序模板数据内容:
这里data参数没有使单独对象一层层封装,使用了map集合key/value形式。
/*** @author hanyy* @Description: 公众号模板数据内容 * @date 2019/8/8 10:25*/
@Data
public class WechatAppletTemplateItemDTO {private String value;
}
2.推送方法:
根据模板封装通用模板消息发送方法
注意:每次调用推送方法,都需要去拿access_token。
//小程序收到挪车请求通知模板消息
public ResultVO<?> receivedNoticeTemplateSend(WechatTemplateKeyWordDTO dto) {//获取AccessTokenResultVO<?> myAccessToken = getAppletAccessToken();String templateSendaccessToken = (String) myAccessToken.getData();// 填充模板数据WechatAppletTemplateDTO wechatTemplate = new WechatAppletTemplateDTO();//被推送用户wechatTemplate.setTouser(dto.getTouser());//模板idwechatTemplate.setTemplate_id(receivedNotice);// 表单提交场景下为formid,支付场景下为prepay_id(前端传)wechatTemplate.setForm_id(dto.getFormId());// 跳转页面//.setPage("pages/index")/*** 车牌 {{keyword1.DATA}}* 发送时间 {{keyword2.DATA}}* -> {"keyword1": {"value":"xxx"}, "keyword2": ...}*/wechatTemplate.setData(MapUtil.newHashMap(//"keyword1", new WechatAppletTemplateItemDTO(dto.getPaltNo()),//"keyword2", new WechatAppletTemplateItemDTO(dto.getRequestDate())//));log.info("#receivedNoticeTemplateSend:{}", wechatTemplate.toString());WechatApiUtil.wechatAppletTemplateSend(templateSendaccessToken, wechatTemplate);return ResultVOUtil.returnSuccess();
}
3.业务层调用推送方法:
根据推送方法进行传参即可。
注: 小程序的推送是必须要依赖formid,必须是一对一回执,而一次挪车申请表单提交只能产生一次formid,
并且只能使用一次,不可重复使用。所以前端只能提供一个formid给后台,后台只能推送一次小程序通知。
//微信小程序通知申请人被回复
WechatTemplateKeyWordDTO wechatTemplate = new WechatTemplateKeyWordDTO();
//openid/formid表中查
wechatTemplate.setTouser(result.getOpenid());
//唯一formid,一次表单提交仅可使用一次
wechatTemplate.setFormId(result.getFormId());
wechatTemplate.setPaltNo(result.getPlatNo());
wechatTemplate.setContent(dto.getContent());
wechatTemplate.setRequestDate(DateUtil.getTime());
log.info("#申请人被回复小程序通知: openid:{},车牌号:{}", wechatTemplate.getTouser(), wechatTemplate.getPaltNo());
iWxAppletService.replyNoticeTemplateSend(wechatTemplate);
附:封装hutool的MapUtil :
public class MapUtil extends cn.hutool.core.map.MapUtil {public static HashMap newHashMap(Object... keyValues) {return newMap(HashMap.class, keyValues);}public static ConcurrentMap newConcurrentMap(Object... keyValues) {return newMap(ConcurrentMap.class, keyValues);}public static TreeMap newTreeMap(Object... keyValues) {return newMap(TreeMap.class, keyValues);}public static LinkedHashMap newLinkedHashMap(Object... keyValues) {return newMap(LinkedHashMap.class, keyValues);}public static IdentityHashMap newIdentityHashMap(Object... keyValues) {return newMap(IdentityHashMap.class, keyValues);}private static <R extends Map> R newMap(Class<? extends Map> type, Object... keyValues) {if (null == keyValues) {log.warn("MapUtil#newMap() keyValues is null.");return null;}int length = keyValues.length;if (length % 2 != 0) {throw new IllegalArgumentException("参数不符合预期, 可变数组应该成对出现。");}Map resultMap;if (type == HashMap.class) {resultMap = Maps.newHashMap();} else if (type == ConcurrentMap.class) {resultMap = Maps.newConcurrentMap();} else if (type == TreeMap.class) {resultMap = Maps.newTreeMap();} else if (type == LinkedHashMap.class) {resultMap = Maps.newLinkedHashMap();} else if (type == IdentityHashMap.class) {resultMap = Maps.newIdentityHashMap();} else {throw new IllegalArgumentException("MapUtil#newMap() type = " + type.getSimpleName() + " 不支持。");}for (int i = 0; i < length; i = i + 2) {resultMap.put(keyValues[i], keyValues[i + 1]);}return (R) resultMap;}
}
微信小程序java后端开发记录(三):模板消息推送相关推荐
- 微信小程序组件库开发记录
微信小程序组件库开发记录 背景 前言 技术选型 环境搭建 安装 gulp 将`scss`编译为`wxss` 压缩`wxml`,`js`,`json`文件和图片 拷贝文件到另一个目录 删除目录 整合 创 ...
- EasyAR+微信小程序识别图片开发记录
EasyAR+微信小程序识别图片开发记录 所需数据 业务关系 示例代码 总结 所需数据 //小程序>appid AppId:***** //EasyAR> ApiKey:**** APIS ...
- 微信开发众筹项目视频教学小程序+java后端开发+mysql数据库
用HBuilder X开发微信小程序,java后端开发工具idea,mysql数据库,主要功能有:用户管理.分类列表.分类金额.众筹列表.订单列表.系统设置.权限分配 源码下载地址:>>& ...
- 微信小程序开发之formId使用(模板消息)
基于微信小程序的模板消息 下发条件:用户本人在微信体系内与页面有交互行为后触发 1. 使用说明 1.1 获取模板id 登录https://mp.weixin.qq.com获取模板,如果没有合适的模板, ...
- 微信公众号java后端开发记录(一):公众号后台设置
·微信公众号后端开发文档: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 ·开始一些必须设置解读: 登陆公 ...
- 微信小程序java后端搭建
一道面试题 让我们开门见山,直面主题:Dubbo 服务里面有个服务端,还有个消费端你知道吧? 服务端和消费端都各有一个线程池你知道吧? 那么面试题来了:一般情况下,服务提供者比服务消费者多吧.一个服务 ...
- 微信小程序与后端Java接口交互-图书搜索实现
完整微信小程序(Java后端) 技术贴目录清单页面(必看) 我们模拟实现一个微信小程序端关键字图书,然后显示图书列表的功能,如下图: 实现大体思路,前端用户输入关键字,通过bindtap事件,事件里得 ...
- 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...
转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...
- 微信运动步数:小程序+Java后端,源码可下载
微信运动步数:小程序+Java后端 更多资源:www.jeeweixin.com 功能说明: 1.获取和展示用户的微信运动步数,计算卡路里: 2.用户打开小程序即可实现步数打卡入库: 3.通过日历展示 ...
最新文章
- 可微偏导数一定存在_数学分析复习——偏导数(1)
- docker logs 查看实时日志
- 学习总结:CSS(一)定义方式、选择器、选择器权重
- 记一次继承了AbstractAuthenticationProcessingFilter 的过滤器被执行了两次问题
- Boost:bimap双图operator bracket的测试程序
- 程序从技术到管理:思维转变是关键
- java算术运算符的分类_6.Java算术运算符
- 5201. 给植物浇水
- idea断点_IDEA Debug 无法进入断点的解决方法
- [你必须知道的.NET]第二十回:学习方法论
- 英特尔 超核芯显卡 620mac_英特尔也玩马甲?有关USB TypeC的冷知识你了解多少
- Android json数据解析及简单例子
- Hello World@@@@
- Elasticsearch概念介绍文档路由与存储
- 数据结构算法与应用c++语言描述 pdf +源代码,数据结构算法与应用-c++语言描述(清晰版).pdf...
- QNX系统获取PPS属性值
- Linux下为空白SD卡建立BOOT,rootfs分区
- C++面试 select poll epoll之间的区别
- 线性链表实现对二进制数加1运算
- IBMX3250取消raid模式,直接装系统