通过之前的微信开发分享我们应该知道微信如果要给用户主动发送消息可以使用客服消息或多客服,但是发送客服消息用户需在48小时内和微信公众号有过交互,也就是说如果48小时内用户没和公众号交互过,即使发了客服消息用户也可能接不到。除了上面的消息形式外,其实微信还提供了一种模板消息。下面是我总结的一些关于模板消息的优缺点
一 模板消息的优缺点
优点:显示形式有别于其他消息,信息通俗易懂且要美观一些是一种通知类消息,可以主动给用户发送,用户只需关注公众号不需要和公众号有交互;可根据行业的不同发送个性化消息
缺点:消息内容固定,不能进行过多的定制化
二 使用条件
已经通过微信认证的公众号并且已经申请开通过模板消息接口,而且还需要从模板库中选择过模板并已添加到自己的公众平台
首先点这里的按钮:
之后找到合适模板点“添加按钮”
三 程序调用模板消息发送接口
1 模板消息由于模板选取不同需要传入参数的名称、值、参数个数也不同首先要封装2个实体
package com.debug.weixin.pojo;public class TemplateParam {// 参数名称private String name;// 参数值private String value;// 颜色private String color;public TemplateParam(String name,String value,String color){this.name=name;this.value=value;this.color=color;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}}
package com.debug.weixin.pojo;import java.util.List;public class Template {// 消息接收方private String toUser;// 模板idprivate String templateId;// 模板消息详情链接private String url;// 消息顶部的颜色private String topColor;// 参数列表private List<TemplateParam> templateParamList;public String getToUser() {return toUser;}public void setToUser(String toUser) {this.toUser = toUser;}public String getTemplateId() {return templateId;}public void setTemplateId(String templateId) {this.templateId = templateId;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getTopColor() {return topColor;}public void setTopColor(String topColor) {this.topColor = topColor;}public String toJSON() {StringBuffer buffer = new StringBuffer();buffer.append("{");buffer.append(String.format("\"touser\":\"%s\"", this.toUser)).append(",");buffer.append(String.format("\"template_id\":\"%s\"", this.templateId)).append(",");buffer.append(String.format("\"url\":\"%s\"", this.url)).append(",");buffer.append(String.format("\"topcolor\":\"%s\"", this.topColor)).append(",");buffer.append("\"data\":{");TemplateParam param = null;for (int i = 0; i < this.templateParamList.size(); i++) {param = templateParamList.get(i);// 判断是否追加逗号if (i < this.templateParamList.size() - 1){buffer.append(String.format("\"%s\": {\"value\":\"%s\",\"color\":\"%s\"},", param.getName(), param.getValue(), param.getColor()));}else{buffer.append(String.format("\"%s\": {\"value\":\"%s\",\"color\":\"%s\"}", param.getName(), param.getValue(), param.getColor()));}}buffer.append("}");buffer.append("}");return buffer.toString();}public List<TemplateParam> getTemplateParamList() {return templateParamList;}public void setTemplateParamList(List<TemplateParam> templateParamList) {this.templateParamList = templateParamList;}}
2 发送模板消息的主要方法
public static boolean sendTemplateMsg(String token,Template template){boolean flag=false;String requestUrl="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";requestUrl=requestUrl.replace("ACCESS_TOKEN", token);JSONObject jsonResult=CommonUtil.httpsRequest(requestUrl, "POST", template.toJSON());if(jsonResult!=null){int errorCode=jsonResult.getInt("errcode");String errorMessage=jsonResult.getString("errmsg");if(errorCode==0){flag=true;}else{System.out.println("模板消息发送失败:"+errorCode+","+errorMessage);flag=false;}}return flag;}
3 调用模板消息的发送方法
Template tem=new Template();
tem.setTemplateId("LhEDNAdkTcax7gzPetV1hnAmbSoXuo22OEJ8eix1iAw");
tem.setTopColor("#00DD00");
tem.setToUser("oWOHzsm8htRGTadf14eDdcnLsAjM");
tem.setUrl("");List<TemplateParam> paras=new ArrayList<TemplateParam>();
paras.add(new TemplateParam("first","我们已收到您的货款,开始为您打包商品,请耐心等待: )","#FF3333"));
paras.add(new TemplateParam("orderMoneySum","¥20.00","#0044BB"));
paras.add(new TemplateParam("orderProductName","火烧牛干巴","#0044BB"));
paras.add(new TemplateParam("Remark","感谢你对我们商城的支持!!!!","#AAAAAA"));tem.setTemplateParamList(paras);boolean result=sendTemplateMsg(token,tem);
最后看下微信上收到的消息长什么样
由于本人使用的是android手机,消息上面带颜色的颜色条看不出来,如果是土豪用的苹果手机则显示成下面这样