优化公众号推送模板消息
/**
* 微信公众号发送模板消息
* @param sendTemplate
* @return
*/
public ReturnObjI sendTempalte(SendTemplate sendTemplate){
ReturnObjExt returnObj = new ReturnObjExt();
WechatLog wechatLog = new WechatLog() ;
WechatTemplate wechatTemplate = wechatTemplateService.get(sendTemplate.getWechatTemplateId());
List<String> list = new ArrayList<>();
Pattern pattern = Pattern.compile(PATTERN);
Matcher matcher = pattern.matcher(wechatTemplate.getContent());
while (matcher.find()){
list.add(matcher.group());
}
Map<String,TemplateData> map1 = TemplateUtil.temaplateData(list,sendTemplate.getMap());
Template template = new Template();
template.setTemplate_id(wechatTemplate.getTemplateId());
if (StringUtils.isNotEmpty(wechatTemplate.getUrl())){
StringTools.format(wechatTemplate.getUrl() , sendTemplate.getMap()) ;
template.setUrl(wechatTemplate.getUrl());
}
template.setData(map1);
HttpUtil httpUtil = new HttpUtil();
AccessToken accessToken = accessToken();
String url = Constants.SEND_TEMPLATE.replace("ACCESS_TOKEN", accessToken.getToken());
template.setTouser(sendTemplate.getOpenId());
String jsonString = JSON.toJSONString(template);
JSONObject js = httpUtil.httpsRequest(url, "POST", jsonString);
if (js.getString("errcode").equals("0")) {
System.out.println("推送成功, token:{}:" + js);
wechatLog.setState(WechatLog.State.audit.getCode());
} else {
wechatLog.setState(WechatLog.State.notAudit.getCode());
System.out.println("推送失败:{}"+js);
}
wechatLog.setInfo(jsonString);
wechatLog.setOpenid(sendTemplate.getOpenId());
wechatLog.setWechatTemplateId(sendTemplate.getWechatTemplateId());
wechatLog.setErrorCode(js.getString("errcode"));
wechatLog.setTargetId(sendTemplate.getTargetId());
wechatLog.setTargetType(sendTemplate.getTargetType());
wechatLog.setType(WechatLog.Type.tempalte.getCode());
wechatLogService.insert(wechatLog);
return returnObj;
}
public static final String PATTERN = "(?<=\\{\\{)[^.\\}\\}]+";
由之前
改成
由之前的几十行代码改成了只有几行就能完成。
WechatTemplate类
public class WechatTemplate implements Serializable{
private Integer id;
private String templateId;
private Date addTime;
private String url;
private String content;
private Integer messageTemplateId;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@Column
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column
public String getTemplateId() {
return templateId;
}
public void setTemplateId(String templateId) {
this.templateId = templateId;
}
@Column
public Date getAddTime() {
return addTime;
}
public void setAddTime(Date addTime) {
this.addTime = addTime;
}
@Column
public Integer getMessageTemplateId() {
return messageTemplateId;
}
public void setMessageTemplateId(Integer messageTemplateId) {
this.messageTemplateId = messageTemplateId;
}
@Column
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
TemplateData类
/**
* 微信模板数据
* Created by 13592 on 2017/7/31.
*/
public class TemplateData {
/**
* 数据
*/
private Object value;
/**
* 颜色
*/
private String color;
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
利用正则封装模板,是不是简单了很多,当然了,利用正则的前提是,你的模板一定要按照公众号平台规则。