实现效果:
下面要显示五个字段
接下来,参照官方文档,一步步实现:
一、官方给出请求示例、返回示例
二、根据上面编写实体类
(1)请求参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | @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,否则推送的消息空白)
1 2 3 4 5 6 7 8 9 10 11 12 13 | @Data public class DoctorReplyMsgData { private KeyNote keyword1; private KeyNote keyword2; private KeyNote keyword3; private KeyNote keyword4; private KeyNote keyword5; } |
(3)上面五个字段对应的值(data是对象,所以需要这样)
1 2 3 4 5 | @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
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了