实现效果:

下面要显示五个字段

接下来,参照官方文档,一步步实现:

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/template-message/templateMessage.send.html

一、官方给出请求示例、返回示例

二、根据上面编写实体类

(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() == ){
//"推送成功!"
}
}

1、openid:通过jsCode获取的

2、formid:小程序端传过来的

3、Template_id:小程序设置模板时带的

4、data:对象类型

5、token:调用接口获取token

Java实现 微信小程序 + 消息推送的更多相关文章

  1. 微信小程序--消息推送配置Token令牌错误校验失败如何解决

    微信开放第三方API接口, 申请地址: https://mp.weixin.qq.com/advanced/advanced?action=interface&t=advanced/inter ...

  2. 微信小程序消息推送,前端操作

    <form bindsubmit="getFormId" report-submit="true"> <button form-type=&q ...

  3. Java企业微信开发_05_消息推送之发送消息(主动)

    一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...

  4. Java企业微信开发_04_消息推送之发送消息(主动)

    源码请见: Java企业微信开发_00_源码及资源汇总贴 一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息 ...

  5. Java企业微信开发_05_消息推送之被动回复消息

    一.本节要点 1.消息的加解密 微信加解密包 下载地址:http://qydev.weixin.qq.com/java.zip      ,此包中封装好了AES加解密方法,直接调用方法即可. 其中,解 ...

  6. Java 后端微信小程序支付demo (网上说的坑里面基本上都有)

    Java 后端微信小程序支付 一.遇到的问题 1. 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试 2.签名错误 3.已经调起微信统一下单接口,可以拿到预支付ID,但是前端支付的时候 ...

  7. 微信小程序消息通知-打卡考勤

    微信小程序消息通知-打卡考勤 效果: 稍微改一下js就行,有不必要的错误,我就不改了,哈哈! index.js //index.js const app = getApp() // 填写微信小程序ap ...

  8. .NET CORE 微信小程序消息验证的坑

    进入微信小程序,点击开发->选择消息推送->扫码授权,填写必要参数 进入接口开发: /// <summary> /// 验证小程序 /// </summary> / ...

  9. Java实现微信小程序支付(准备)

    Java语言开发微信小程序支付功能: 1.通过https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1路径到官方下载Java的支付SD ...

随机推荐

  1. css overflow失效的原因

    声明 转载自https://my.oschina.net/xuqianwen/blog/540587 项目中常常有同学遇到这样的问题,现象是给元素设置了overflow:hidden,但超出容器的部分 ...

  2. version GLIBCXX3.4.21 not defined in file libstdc++.so.6 with link time reference

    问题:在运行C++程序时,输入 ./a.out 输出:symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev, version ...

  3. php怎样应对高并发

    高并发下的数据安全 我们知道在多线程写入同一个文件的时候,会出现“线程安全”的问题(多个线程同时运行同一段代码,如果每次运行结果和单线程运行的结果是一样的,结果和预期相同,就是线程安全的). 如果是M ...

  4. Opentrains 1519 G——最小圆覆盖

    题目 给出 $n$ 个定义在区间 $[0, 1]$ 上的一次函数 $f_i(x) = a_ix+b_i$,定义两个函数的距离为: $$dist(f,g) = \left(\max_{0\leq i\l ...

  5. Buy Fruits-(构造)

    https://ac.nowcoder.com/acm/contest/847/C 在blueland上有 n n个水果店,它们的编号依次为 0,1,2...n−1 0,1,2...n−1.奇妙的是, ...

  6. python--模块学习之xml模块

    xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 本文主要学习的ElementTree是python的XML处理模块,它提供了一个轻量级的对象 ...

  7. A1139 | 玩成模拟题的DFS

    考试的时候有思路了,但是没写完.这题起码要40min写,思路太诡异了. 刚刚写了一段,只过了一个case,得了18分,还行.明日再战. #include <stdio.h> #includ ...

  8. 字典树(Trie)学习笔记

    目录 什么是字典树 如何存储字典树 如何查找字符串有没有出现 第一个图的那种线段树 应用 例题 1.统计难题 2.P2580 于是他错误的点名开始了 什么是字典树 上图来自luogu题解 这是一种字典 ...

  9. 在Linux下配置git并设置远程仓库

    自己常在云服务器上进行代码的编写,为了更方便的保存工作和管理,便使用了git这个版本管理工具来管理.下面介绍整个服务的配置过程. git的下载安装: 使用以下命令,回车即可,中间过程会有一个按y回车的 ...

  10. 洛谷2051 [AHOI2009]中国象棋

    题目链接 题意概述:n行m列棋盘放若干个棋子每行每列最多两个求方案总数,答案对9999973取模. 可以比较容易看出这是个dp,设f[i][j][k]表示前i行j列放1个棋子k列放2个棋子的方案总数. ...