Java微信公众平台开发之发送模板消息
2017-04-06 09:51
851 查看
模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。
关于使用规则,请注意:
1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限;
2、需要选择公众账号服务所处的2个行业,每月可更改1次所选行业;
3、在所选择行业的模板库中选用已有的模板进行调用;
4、每个账号可以同时使用25个模板。
5、当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制,以公众号MP后台开发者中心页面中标明的数字为准。
关于接口文档,请注意:
1、模板消息调用时主要需要模板ID和模板中各参数的赋值内容;
2、模板中参数内容必须以".DATA"结尾,否则视为保留字;
3、模板保留符号"{{ }}"。
模板申请成功之后直接新增不需要额外配置的,如果是在测试号中测试的,复制粘贴的时候要注意以上注意项
以下是我使用的模板消息
[plain] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
{{first.DATA}}
旅行活动名称:{{keyword1.DATA}}
订单金额:{{keyword2.DATA}}
旅行时间:{{keyword3.DATA}}
参与人数:{{keyword4.DATA}}
{{remark.DATA}}
官方的demo
[plain] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
POST数据示例如下:
{
"touser":"OPENID",
"template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
"url":"http://weixin.qq.com/download",
"data":{
"first": {
"value":"恭喜你购买成功!",
"color":"#173177"
},
"keynote1":{
"value":"巧克力",
"color":"#173177"
},
"keynote2": {
"value":"39.8元",
"color":"#173177"
},
"keynote3": {
"value":"2014年9月22日",
"color":"#173177"
},
"remark":{
"value":"欢迎再次购买!",
"color":"#173177"
}
}
}
1.根据官方实例创建参数的Bean
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
public class TemplateData {
private String value;
private String color;
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;
}
}
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
public class WechatTemplate {
private String touser;
private String template_id;
private String url;
private Map<String, TemplateData> data;
public String getTouser() {
return touser;
}
public void setTouser(String touser) {
this.touser = touser;
}
public String getTemplate_id() {
return template_id;
}
public void setTemplate_id(String template_id) {
this.template_id = template_id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Map<String, TemplateData> getData() {
return data;
}
public void setData(Map<String, TemplateData> data) {
this.data = data;
}
}
2.创建发送的方法
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
private final String SEND_TEMPLAYE_MESSAGE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
public void sendTemplateMessage(String accessToken, WechatTemplate wechatTemplate) {
String jsonString = new Gson().toJson(wechatTemplate).toString();
String requestUrl = SEND_TEMPLAYE_MESSAGE_URL.replace("ACCESS_TOKEN", accessToken);
JSONObject jsonObject = HttpRequestUtil.httpRequestJSONObject(requestUrl, HttpRequestUtil.POST_METHOD, jsonString);
logger.info("jsonObject="+jsonObject);
if (null != jsonObject) {
int errorCode = jsonObject.getInt("errcode");
if (0 == errorCode) {
logger.info("模板消息发送成功");
} else {
String errorMsg = jsonObject.getString("errmsg");
logger.info("模板消息发送失败,错误是 "+errorCode+",错误信息是"+ errorMsg);
}
}
}
3.根据业务需要调用方法
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
String accessToken = WechatUtil.getAccessToken(WechatConfig.APP_ID, WechatConfig.APP_SECRET).getToken();
logger.info("为模板消息接口获取的accessToken是"+accessToken);
WechatTemplate wechatTemplate = new WechatTemplate();
wechatTemplate.setTemplate_id("Ub2oYYFPf8ofmA17H31Zqu9Z_HLycZ7MC-Dx_Se1Nkw");
wechatTemplate.setTouser(fromUserName);
wechatTemplate.setUrl("http://music.163.com/#/song?id=27867140");
Map<String,TemplateData> m = new HashMap<String,TemplateData>();
TemplateData first = new TemplateData();
first.setColor("#000000");
first.setValue("您的户外旅行活动订单已经支付完成,可在我的个人中心中查看。");
m.put("first", first);
TemplateData keyword1 = new TemplateData();
keyword1.setColor("#000000");
keyword1.setValue("1.2发现尼泊尔—人文与自然的旅行圣地 ");
m.put("keyword1", keyword1);
TemplateData keyword2 = new TemplateData();
keyword2.setColor("#000000");
keyword2.setValue("5000元");
m.put("keyword2", keyword2);
TemplateData keyword3 = new TemplateData();
keyword3.setColor("#000000");
keyword3.setValue("2017.1.2");
m.put("keyword3", keyword3);
TemplateData keyword4 = new TemplateData();
keyword4.setColor("#000000");
keyword4.setValue("5");
m.put("keyword4", keyword4);
TemplateData remark = new TemplateData();
remark.setColor("#000000");
remark.setValue("请届时携带好身份证件准时到达集合地点,若临时退改将产生相应损失,敬请谅解,谢谢!");
m.put("remark", remark);
wechatTemplate.setData(m);
try {
templateMessageService.sendTemplateMessage(accessToken, wechatTemplate);
} catch (Exception e) {
logger.info("异常"+e.getMessage());
}
关于使用规则,请注意:
1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限;
2、需要选择公众账号服务所处的2个行业,每月可更改1次所选行业;
3、在所选择行业的模板库中选用已有的模板进行调用;
4、每个账号可以同时使用25个模板。
5、当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制,以公众号MP后台开发者中心页面中标明的数字为准。
关于接口文档,请注意:
1、模板消息调用时主要需要模板ID和模板中各参数的赋值内容;
2、模板中参数内容必须以".DATA"结尾,否则视为保留字;
3、模板保留符号"{{ }}"。
模板申请成功之后直接新增不需要额外配置的,如果是在测试号中测试的,复制粘贴的时候要注意以上注意项
以下是我使用的模板消息
[plain] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
{{first.DATA}}
旅行活动名称:{{keyword1.DATA}}
订单金额:{{keyword2.DATA}}
旅行时间:{{keyword3.DATA}}
参与人数:{{keyword4.DATA}}
{{remark.DATA}}
官方的demo
[plain] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
POST数据示例如下:
{
"touser":"OPENID",
"template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
"url":"http://weixin.qq.com/download",
"data":{
"first": {
"value":"恭喜你购买成功!",
"color":"#173177"
},
"keynote1":{
"value":"巧克力",
"color":"#173177"
},
"keynote2": {
"value":"39.8元",
"color":"#173177"
},
"keynote3": {
"value":"2014年9月22日",
"color":"#173177"
},
"remark":{
"value":"欢迎再次购买!",
"color":"#173177"
}
}
}
1.根据官方实例创建参数的Bean
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
public class TemplateData {
private String value;
private String color;
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;
}
}
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
public class WechatTemplate {
private String touser;
private String template_id;
private String url;
private Map<String, TemplateData> data;
public String getTouser() {
return touser;
}
public void setTouser(String touser) {
this.touser = touser;
}
public String getTemplate_id() {
return template_id;
}
public void setTemplate_id(String template_id) {
this.template_id = template_id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Map<String, TemplateData> getData() {
return data;
}
public void setData(Map<String, TemplateData> data) {
this.data = data;
}
}
2.创建发送的方法
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
private final String SEND_TEMPLAYE_MESSAGE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
public void sendTemplateMessage(String accessToken, WechatTemplate wechatTemplate) {
String jsonString = new Gson().toJson(wechatTemplate).toString();
String requestUrl = SEND_TEMPLAYE_MESSAGE_URL.replace("ACCESS_TOKEN", accessToken);
JSONObject jsonObject = HttpRequestUtil.httpRequestJSONObject(requestUrl, HttpRequestUtil.POST_METHOD, jsonString);
logger.info("jsonObject="+jsonObject);
if (null != jsonObject) {
int errorCode = jsonObject.getInt("errcode");
if (0 == errorCode) {
logger.info("模板消息发送成功");
} else {
String errorMsg = jsonObject.getString("errmsg");
logger.info("模板消息发送失败,错误是 "+errorCode+",错误信息是"+ errorMsg);
}
}
}
3.根据业务需要调用方法
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
String accessToken = WechatUtil.getAccessToken(WechatConfig.APP_ID, WechatConfig.APP_SECRET).getToken();
logger.info("为模板消息接口获取的accessToken是"+accessToken);
WechatTemplate wechatTemplate = new WechatTemplate();
wechatTemplate.setTemplate_id("Ub2oYYFPf8ofmA17H31Zqu9Z_HLycZ7MC-Dx_Se1Nkw");
wechatTemplate.setTouser(fromUserName);
wechatTemplate.setUrl("http://music.163.com/#/song?id=27867140");
Map<String,TemplateData> m = new HashMap<String,TemplateData>();
TemplateData first = new TemplateData();
first.setColor("#000000");
first.setValue("您的户外旅行活动订单已经支付完成,可在我的个人中心中查看。");
m.put("first", first);
TemplateData keyword1 = new TemplateData();
keyword1.setColor("#000000");
keyword1.setValue("1.2发现尼泊尔—人文与自然的旅行圣地 ");
m.put("keyword1", keyword1);
TemplateData keyword2 = new TemplateData();
keyword2.setColor("#000000");
keyword2.setValue("5000元");
m.put("keyword2", keyword2);
TemplateData keyword3 = new TemplateData();
keyword3.setColor("#000000");
keyword3.setValue("2017.1.2");
m.put("keyword3", keyword3);
TemplateData keyword4 = new TemplateData();
keyword4.setColor("#000000");
keyword4.setValue("5");
m.put("keyword4", keyword4);
TemplateData remark = new TemplateData();
remark.setColor("#000000");
remark.setValue("请届时携带好身份证件准时到达集合地点,若临时退改将产生相应损失,敬请谅解,谢谢!");
m.put("remark", remark);
wechatTemplate.setData(m);
try {
templateMessageService.sendTemplateMessage(accessToken, wechatTemplate);
} catch (Exception e) {
logger.info("异常"+e.getMessage());
}
相关文章推荐
- Java微信公众平台开发之发送模板消息
- Java微信公众平台开发之发送模板消息
- Java微信公众平台开发之发送模板消息
- 微信公众平台开发之模板消息(Java)
- 使用EasyWechat开发java微信公众平台应用(二)——发送不同类型的消息
- 微信公众平台开发-消息管理-发送模板消息
- 微信公众平台开发教程Java版(3) 消息接收和发送
- java开发微信第三方平台 模板消息发送消息案例
- 使用Java语言开发微信公众平台(四)——图文消息的发送与响应
- java微信公众号开发发送模板消息
- 微信公众平台开发-发送模板消息
- 微信公众平台开发教程Java版(三) 消息接收和发送
- 微信公众平台开发-发送模板消息
- 微信公众平台开发之模板消息(Java)
- 微信公众平台开发之模板消息(Java)
- 微信公众平台开发(73) 客服接口发送客服消息
- 微信公众平台开发(十二) 发送客服消息
- java微信开发(wechat4j)——发送客服消息
- 微信公众平台开发(102) 模板消息
- 微信公众号发送模板消息(java)