实现效果:
下面要显示五个字段
接下来,参照官方文档,一步步实现:
一、官方给出请求示例、返回示例
二、根据上面编写实体类
(1)请求参数
@Data
public class SendTemplateReq {
/**
* 接收者(用户)的 openid
*/
private String touser;
/**
* 所需下发的模板消息的id
*/
private String template_id;
/**
* 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。
* 该字段不填则模板无跳转。
*/
private String page;
/**
* 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id
*/
private String form_id;
/**
* 模板内容
* 不填则下发空模板。具体格式请参考示例。
*/
private DoctorReplyMsgData data;
/**
* 模板需要放大的关键词
* 不填则默认无放大
*/
private String emphasis_keyword;
}
(2)请求参数中的data,如实现效果所示,这是在小程序显示的五个字段.
(属性名就要叫keyword1、2、3,否则推送的消息空白)
@Data public class DoctorReplyMsgData { private KeyNote keyword1; private KeyNote keyword2; private KeyNote keyword3; private KeyNote keyword4; private KeyNote keyword5; }
(3)上面五个字段对应的值(data是对象,所以需要这样)
@Data public class KeyNote { private String value; }
(4)请求后,微信返回的消息体
@Data
public class SendTemplateResponse {
/**
* 错误码
* 0 ok
* 40037 template_id不正确
* 41028 form_id不正确,或者过期
* 41029 form_id已被使用
* 41030 page不正确
* 45009 接口调用超过限额(目前默认每个帐号日调用限额为100万)
*/
private int errcode;
/**
* 错误信息
*/
private String errmsg;
}
三、实现代码
public void sendTemplate() {
SendTemplateReq sendTemplateReq = new SendTemplateReq();
//1、用户的 openid
sendTemplateReq.setTouser("openid");
//2、模板消息的id
sendTemplateReq.setTemplate_id("小程序启用模板的模板id");
//3、formid
sendTemplateReq.setForm_id("小程序传给后台的formid,七天有效");
//4、点击模板跳转页面
sendTemplateReq.setPage("");
//5、Data,按次序,只能叫keyword1、2、3
DoctorReplyMsgData replyData = new DoctorReplyMsgData();
KeyNote keyword1 = new KeyNote();
keyword1.setValue("小程序显示的消息字段1");
replyData.setKeyword1(keyword1);
KeyNote keyword2 = new KeyNote();
keyword2.setValue("小程序显示的消息字段2");
replyData.setKeyword2(keyword2);
sendTemplateReq.setData(replyData);
//如上...总共五个字段
//6、获取token
String token = "token,俩小时有效";
//7、模板url拼接上token,最上面的请求的url那样
String url = "TemplateUrl" + "token";
//8、请求体转为json
String reqStr=JsonUtil.ModelToGson(sendTemplateReq);
//9、发送httpclient请求
String resultStr = httpRequestUtil.doPost(sb.toString(), reqStr);
//10、接收返回的消息体:是否成功,成功返回0
SendTemplateResponse sendTemplateResponse = (SendTemplateResponse)JsonUtil.GsonToModel(resultStr,SendTemplateResponse.class);
if(sendTemplateResponse.getErrcode() == 0){
//"推送成功!"
}
}
1、openid:通过jsCode获取的
2、formid:小程序端传过来的
3、Template_id:小程序设置模板时带的
4、data:对象类型
5、token:调用接口获取token