本片文章将讲述微信公众平台消息管理中的模板消息
接下来对模板消息进行一番介绍(也就是公众开发者文档考过来的^_^,当然自己的使用过程也会穿插进去)
模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。具体模板消息运营规则请读模板消息运营规范
关于使用规则,请注意:
1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限;
2、需要选择公众账号服务所处的2个行业,每月可更改1次所选行业;
3、在所选择行业的模板库中选用已有的模板进行调用;
4、每个账号可以同时使用25个模板。
5、当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制。【2014年11月18日将接口调用频率从默认的日1万次提升为日10万次,可在MP登录后的开发者中心查看】。当账号粉丝数超过10W/100W/1000W时,模板消息的日调用上限会相应提升,以公众号MP后台开发者中心页面中标明的数字为准。
关于接口文档,请注意:
1、模板消息调用时主要需要模板ID和模板中各参数的赋值内容;
2、模板中参数内容必须以”.DATA”结尾,否则视为保留字;
3、模板保留符号”{{ }}”。
关于模板消息内容的设置
下面这张图就是我设置的一个模板消息
下面这张是测试账号里面新增弹出的框题,其中内容的换行直接敲回车就可以了。当时测试的时候又是加/n和//n的,发现自己好傻。。。
然后参数就是{{xx.DATA}}xx不可以重复,因为调用时需要为他们设置值,就跟实体Bean一样。
内容设置完了,后面就是代码调用了
下面是序列图
下面这块代码是获取模板消息json,TemplateMsg 是封装的一个实体Bean,包括发送人和其他一些信息。
private static String getTemplateJson(TemplateMsg templateMsg) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("touser", templateMsg.getTouser());
jsonObject.put("template_id", TEMPLATEID);
jsonObject.put("url", templateMsg.getUrl());
JSONObject data = new JSONObject();
JSONObject result = new JSONObject();
result.put("value", templateMsg.getResult());
result.put("color", "#173177");
JSONObject bookTitle = new JSONObject();
bookTitle.put("value", templateMsg.getBookTitle());
bookTitle.put("color", "#173177");
JSONObject timeName = new JSONObject();
timeName.put("value", templateMsg.getTimeName());
JSONObject time = new JSONObject();
Date currentTime = templateMsg.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd HH:mm:ss");
String dateString = formatter.format(currentTime);
time.put("value", dateString);
time.put("color", "#173177");
JSONObject msg = new JSONObject();
msg.put("value", templateMsg.getMsg());
msg.put("color", "#173177");
data.put("result", result);
data.put("bookName", bookTitle);
data.put("timeName", timeName);
data.put("time", time);
data.put("msg", msg);
jsonObject.put("data", data);
return jsonObject.toString();
}
从上面那个代码块获取到json后,调用下方代码块获得InputStream 解析即可。调用方式:connectHttp(url, "POST", getTemplateJson(templateMsg).getBytes("UTF-8"));
public static InputStream connectHttp(String urlStr,String method,byte[] bs) throws IOException{
URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(method);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.connect();
if (bs != null) {
OutputStream outputStream = connection.getOutputStream();
outputStream.write(bs);
outputStream.flush();
outputStream.close();
}
return connection.getInputStream();
}