模板消息结果如下:
第一步:在微信公众号,增加模板消息
模板消息中使用的模板ID
第二步:
组装模板需要的消息:
根据上边的消息内容组装消息,创建下面三个实体类:
第一个实体类:TemplateMessage
public class TemplateMessage {
/**
* 微信的openId
*/
private String touser;
/**
* 消息模板ID
*/
private String template_id;
/**
* 模板数据封装实体
*/
private Data data;
get/set方法省略
}
第二个实体类:data
public class Data {
private Content first;
private Content keyword1;
private Content keyword2;
private Content remark;
get/set方法省略
}
第三个试题类:Content
public class Content {
//消息内容
private String value;
//消息字体颜色
private String color;
get/set 方法省略
}
第三:发送模板消息的接口为:
打开文档”发送模板消息”
获得发送模板的接口地址:https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
使用POST的方式来发送,并且把模板消息的数据以json数据的格式传递到该接口。
我们先来看看json里面的参数主要有哪些?
实际上,必传的只有 touser接收者,template_id模板id,data模板数据这3个参数,其他的可以不传,如果传了就会有相应的跳转,比如跳转至指定url,或者跳转至小程序。
准备好的json数据:
{
"touser":"OPENID",
"template_id":"QI4JojaGvL9-5ynjwFwOSPqH2eWXHpr7ZeseysefKqc",
"data":{
"first": {
"value":"作业完成情况统计",
"color":"#173177"
},
"keyword1":{
"value":"模拟试题1",
"color":"#173177"
},
"keyword2": {
"value":"2019年4月8日 15:36",
"color":"#173177"
},
"remark":{
"value":"完成作业学生:李四,未完成作业学生:张三,赵六!",
"color":"#173177"
}
}
发送和组装数据代码如下:
/**
* 发送作业完成情况
*
* @return
*/
@Override
public JsonResult sendHomeworkFinishStatus(String userId, Integer homeworkId) {
try {
String openId = userWechat.getWechatOpenid();
TemplateMessage templateMessage = new TemplateMessage();
templateMessage.setTouser( openId );
templateMessage.setTemplate_id( templateId );
Data data = getTemplateData( examHomework );
templateMessage.setData( data );
//将封装的数据转换为json
String jsonString = JSON.toJSONString( templateMessage );
//发送模板消息
String accessToken = this.getAccessToken();
String url = Send_Template_URL.replace( "ACCESS_TOKEN", accessToken );
//调用接口进行发送
try {
String resultStr = HttpUtil.doPost( url, jsonString );
return JsonResult.success( resultStr );
} catch (Exception e) {
e.printStackTrace();
return JsonResult.error( new CodeMsg( -1, "调用微信接口失败" ) );
}
} catch (Exception ex) {
return JsonResult.error( new CodeMsg( -1, "发送消息失败" ) );
}
}
//获取消息模板的数据
private Data getTemplateData(ExamHomework examHomework) {
//设置模板标题
Content first = new Content();
first.setValue( "练习完成情况统计" );
first.setColor( "#173177" );
//设置作业名称
Content keyword1 = new Content();
keyword1.setValue( “模拟测试题1” );
keyword1.setColor( "#173177" );
//设置完成时间
Content keyword2 = new Content();
keyword2.setValue(“2019年4月8日 15:36”);
keyword2.setColor( "#173177" );
//设置remark
Content remark = new Content();
remark.setValue( “完成作业学生:李四,未完成作业学生:张三,赵六” );
remark.setColor( "#173177" );
//创建模板信息数据对象
Data data = new Data();
data.setFirst( first );
data.setKeyword1( keyword1 );
data.setKeyword2( keyword2 );
data.setRemark( remark );
return data;
}
doPost方法:
/**
* post请求(用于请求json格式的参数)
*
* @param url
* @param params
* @return
*/
public static String doPost(String url, String params) throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost( url );// 创建httpPost
httpPost.setHeader( "Accept", "application/json" );
httpPost.setHeader( "Content-Type", "application/json" );
String charSet = "UTF-8";
StringEntity entity = new StringEntity( params, charSet );
httpPost.setEntity( entity );
CloseableHttpResponse response = null;
try {
response = httpclient.execute( httpPost );
StatusLine status = response.getStatusLine();
int state = status.getStatusCode();
if (state == HttpStatus.SC_OK) {
HttpEntity responseEntity = response.getEntity();
String jsonString = EntityUtils.toString( responseEntity );
return jsonString;
} else {
logger.error( "请求返回:" + state + "(" + url + ")" );
}
} finally {
if (response != null) {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}