900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 微信小程序java后端开发记录(三):模板消息推送

微信小程序java后端开发记录(三):模板消息推送

时间:2022-11-11 10:23:28

相关推荐

微信小程序java后端开发记录(三):模板消息推送

·模板消息推送

1.1推送参数dto:

按照文档逐层次封装请求参数。

这些参数

/*** @author hanyy* @Description: 微信小程序模板消息推送参数* @date /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 /8/8 10:25*/@Datapublic 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;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。