1. 程式人生 > >優化公眾號推送模板訊息

優化公眾號推送模板訊息

/**
     * 微信公眾號傳送模板訊息
     * @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;
    }
}

利用正則封裝模板,是不是簡單了很多,當然了,利用正則的前提是,你的模板一定要按照公眾號平臺規則。