·模板消息推送

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后端开发记录(三):模板消息推送相关推荐

  1. 微信小程序组件库开发记录

    微信小程序组件库开发记录 背景 前言 技术选型 环境搭建 安装 gulp 将`scss`编译为`wxss` 压缩`wxml`,`js`,`json`文件和图片 拷贝文件到另一个目录 删除目录 整合 创 ...

  2. EasyAR+微信小程序识别图片开发记录

    EasyAR+微信小程序识别图片开发记录 所需数据 业务关系 示例代码 总结 所需数据 //小程序>appid AppId:***** //EasyAR> ApiKey:**** APIS ...

  3. 微信开发众筹项目视频教学小程序+java后端开发+mysql数据库

    用HBuilder X开发微信小程序,java后端开发工具idea,mysql数据库,主要功能有:用户管理.分类列表.分类金额.众筹列表.订单列表.系统设置.权限分配 源码下载地址:>>& ...

  4. 微信小程序开发之formId使用(模板消息)

    基于微信小程序的模板消息 下发条件:用户本人在微信体系内与页面有交互行为后触发 1. 使用说明 1.1 获取模板id 登录https://mp.weixin.qq.com获取模板,如果没有合适的模板, ...

  5. 微信公众号java后端开发记录(一):公众号后台设置

    ·微信公众号后端开发文档: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 ·开始一些必须设置解读: 登陆公 ...

  6. 微信小程序java后端搭建

    一道面试题 让我们开门见山,直面主题:Dubbo 服务里面有个服务端,还有个消费端你知道吧? 服务端和消费端都各有一个线程池你知道吧? 那么面试题来了:一般情况下,服务提供者比服务消费者多吧.一个服务 ...

  7. 微信小程序与后端Java接口交互-图书搜索实现

    完整微信小程序(Java后端) 技术贴目录清单页面(必看) 我们模拟实现一个微信小程序端关键字图书,然后显示图书列表的功能,如下图: 实现大体思路,前端用户输入关键字,通过bindtap事件,事件里得 ...

  8. 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...

    转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...

  9. 微信运动步数:小程序+Java后端,源码可下载

    微信运动步数:小程序+Java后端 更多资源:www.jeeweixin.com 功能说明: 1.获取和展示用户的微信运动步数,计算卡路里: 2.用户打开小程序即可实现步数打卡入库: 3.通过日历展示 ...

最新文章

  1. 可微偏导数一定存在_数学分析复习——偏导数(1)
  2. docker logs 查看实时日志
  3. 学习总结:CSS(一)定义方式、选择器、选择器权重
  4. 记一次继承了AbstractAuthenticationProcessingFilter 的过滤器被执行了两次问题
  5. Boost:bimap双图operator bracket的测试程序
  6. 程序从技术到管理:思维转变是关键
  7. java算术运算符的分类_6.Java算术运算符
  8. 5201. 给植物浇水
  9. idea断点_IDEA Debug 无法进入断点的解决方法
  10. [你必须知道的.NET]第二十回:学习方法论
  11. 英特尔 超核芯显卡 620mac_英特尔也玩马甲?有关USB TypeC的冷知识你了解多少
  12. Android json数据解析及简单例子
  13. Hello World@@@@
  14. Elasticsearch概念介绍文档路由与存储
  15. 数据结构算法与应用c++语言描述 pdf +源代码,数据结构算法与应用-c++语言描述(清晰版).pdf...
  16. QNX系统获取PPS属性值
  17. Linux下为空白SD卡建立BOOT,rootfs分区
  18. C++面试 select poll epoll之间的区别
  19. 线性链表实现对二进制数加1运算
  20. IBMX3250取消raid模式,直接装系统

热门文章

  1. 腾讯企业邮箱的三大项管理功能
  2. Ren’py语言编程,心跳文学部mod制作①
  3. 【互联网生存法则】互联网打工人的一天
  4. HTML统一资源定位器——html的url知识
  5. 特种兵椰子汁——我的心情调节剂
  6. 收到银行短信你正在使用Android设备,手机收到扣费短信,无故被扣钱?小心自动订阅的大坑!...
  7. 你“球”不如她,球技更不如她!
  8. 二、蓝色巨人--IBM---1924 老托马斯华生Thomas J. Waston
  9. css 浮动 -张鑫旭博客笔记
  10. iPhone如何微信分身