小程序:

wxml:

 <form bind:submit="testSubmit" report-submit="true"><button formType="submit" class='modelButton'>发送模板消息</button></form>

wxss:

.modelButton{margin-top:50%;width: 50%;
}

js前端发送模板消息:

注意:每个小程序的openid都是不一样的,这里使用的是我的小程序的openid,应替换为自己小程序的openid。

关于解密openid参考我的另一篇博客:https://blog.csdn.net/LONG_Yi_1994/article/details/82977603

    testSubmit: function(e) {console.log(e);var self = this;let method = 'GET';let openid = 'obk-W5Fq76sHfAnnC_8L_6xEew0M';let _access_token = '14_Z_mmRqZ8F0LSoYphxhXLcY1qYQbiArASnTyRChBQtKnWDL3co46eXwQsL8Qr58yZ01XmE6shkLGNGkz1zhX0zqPNNsXJlGljdLejCR_qerPP76H-4ZodZT4XTPqEAywHtNB_m-djIzoN3AyHZZJjAFASSC';let url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' + _access_token;let _jsonData = {access_token: _access_token,touser: 'oK_7b4mGyt6L9DRXWINxjEeCb_no',template_id: 'PZ-QULr4atCAgBacoMjh09u0bAVA_St-lNCp5jV7Pcs',form_id: e.detail.formId,page: "pages/index/index",data: {"keyword1": {"value": "测试数据一","color": "#173177"},"keyword2": {"value": "测试数据二","color": "#173177"},"keyword3": {"value": "测试数据三","color": "#173177"},"keyword4": {"value": "测试数据四","color": "#173177"},"keyword5": {"value": "测试数据五","color": "#173177"},"keyword6": {"value": "测试数据六","color": "#173177"}}};wx.request({url: "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token="+_access_token,data: _jsonData,method: method,success: function(res) {console.log(res)wx.showToast({title: '发送成功',})},fail: function(err) {console.log('request fail ', err);},complete: function(res) {console.log("request completed!");}})}

java代码后台发送模板消息:

后端发送模板消息需要获取前端表单提交的formid

controller:

    @GetMapping("/publishModelMessage")public String publishModelMessage(@RequestParam(required = false) String formId,@RequestParam(required = false) String openId,HttpServletResponse response){openId = "oK_7b4mGyt6L9DRXWINxjEeCb_no";Token token = CommonUtil.getToken("你的小程序appid","你的小程序密钥");System.out.println(token.getAccessToken());WxMssVo wxMssVo = new WxMssVo();wxMssVo.setTemplate_id("PZ-QULr4atCAgBacoMjh09u0bAVA_St-lNCp5jV7Pcs");wxMssVo.setTouser(openId);wxMssVo.setPage("pages/index/index");wxMssVo.setRequest_url("https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" + token.getAccessToken());wxMssVo.setForm_id(formId);List<TemplateData> list = new ArrayList<>();list.add(new TemplateData("通知","#ffffff"));list.add(new TemplateData("李银龙","#ffffff"));list.add(new TemplateData("发布成功","#ffffff"));list.add(new TemplateData(new Date().toString(),"#ffffff"));list.add(new TemplateData("日常加班","#ffffff"));list.add(new TemplateData("深圳市方寸科技服务有限公司","#ffffff"));wxMssVo.setParams(list);CommonUtil.sendTemplateMessage(wxMssVo);return null;}

工具类CommonUtil:

public class CommonUtil {public final static String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";//获取小程序tokenpublic static Token getToken(String appid, String appsecret) {Token token = null;String requestUrl = token_url.replace("APPID", appid).replace("APPSECRET", appsecret);// 发起GET请求获取凭证JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);if (null != jsonObject) {try {token = new Token();token.setAccessToken(jsonObject.getString("access_token"));token.setExpiresIn(jsonObject.getInteger("expires_in"));} catch (JSONException e) {token = null;// 获取token失败e.printStackTrace();}}return token;}//发送模板消息public static String sendTemplateMessage(WxMssVo wxMssVo) {String info = "";try {//创建连接URL url = new URL(wxMssVo.getRequest_url());HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setDoOutput(true);connection.setDoInput(true);connection.setRequestMethod("POST");connection.setUseCaches(false);connection.setInstanceFollowRedirects(true);connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");connection.setRequestProperty("Content-Type", "utf-8");connection.connect();//POST请求DataOutputStream out = new DataOutputStream(connection.getOutputStream());JSONObject obj = new JSONObject();obj.put("access_token", wxMssVo.getAccess_token());obj.put("touser", wxMssVo.getTouser());obj.put("template_id", wxMssVo.getTemplate_id());obj.put("form_id", wxMssVo.getForm_id());obj.put("page", wxMssVo.getPage());JSONObject jsonObject = new JSONObject();for (int i = 0; i < wxMssVo.getParams().size(); i++) {JSONObject dataInfo = new JSONObject();dataInfo.put("value", wxMssVo.getParams().get(i).getValue());dataInfo.put("color", wxMssVo.getParams().get(i).getColor());jsonObject.put("keyword" + (i + 1), dataInfo);}obj.put("data", jsonObject);out.write(obj.toString().getBytes());out.flush();out.close();//读取响应BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));String lines;StringBuffer sb = new StringBuffer("");while ((lines = reader.readLine()) != null) {lines = new String(lines.getBytes(), "utf-8");sb.append(lines);}info = sb.toString();System.out.println(sb);reader.close();// 断开连接connection.disconnect();} catch (Exception e) {e.printStackTrace();}return info;}public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {JSONObject jsonObject = null;try {// 创建 SSLContext 对象,并使用我们指定的信任管理器初始化TrustManager[] tm = { new MyX509TrustManager() };SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");sslContext.init(null, tm, new java.security.SecureRandom());// 从上述 SSLContext 对象中得到 SSLSocketFactory 对象SSLSocketFactory ssf = sslContext.getSocketFactory();URL url = new URL(requestUrl);HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();conn.setSSLSocketFactory(ssf);conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);// 设置请求方式(GET/POST)conn.setRequestMethod(requestMethod);// 当 outputStr 不为 null 时,向输出流写数据if (null != outputStr) {OutputStream outputStream = conn.getOutputStream();// 注意编码格式outputStream.write(outputStr.getBytes("UTF-8"));outputStream.close();}// 从输入流读取返回内容InputStream inputStream = conn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;StringBuffer buffer = new StringBuffer();while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}// 释放资源bufferedReader.close();inputStreamReader.close();inputStream.close();inputStream = null;conn.disconnect();jsonObject = JSONObject.parseObject(buffer.toString());} catch (ConnectException ce) {ce.printStackTrace();} catch (Exception e) {e.printStackTrace();}return jsonObject;}}

Token类:

public class Token {//接口访问凭证private String accessToken;//接口有效期,单位:秒private int expiresIn;public String getAccessToken() {return accessToken;}public void setAccessToken(String accessToken) {this.accessToken = accessToken;}public int getExpiresIn() {return expiresIn;}public void setExpiresIn(int expiresIn) {this.expiresIn = expiresIn;}
}

模板消息请求参数封装类WxMssVo :

public class WxMssVo {private String touser;private String template_id;private String page;private String form_id;private String access_token;private String request_url;private List<TemplateData> params = new ArrayList<>();
}

模板消息详细参数封装TemplateData :

public class TemplateData {private String key;private String value;private String color;public TemplateData(String value, String color) {this.value = value;this.color = color;}
}

最终效果:

关注公众号回复091可获取项目源码

Java微信小程序发送服务通知相关推荐

  1. Java实现微信小程序发送服务通知

    Java代码实现发送微信小程序服务通知 笔者在上个月接到一个需求,大概是需要计算一条数据的最大办理时间从而发送任务超期的微信小程序服务通知,俺也是第一次接触到需要调用微信的API去进行发送消息,该博客 ...

  2. 微信小程序发送服务通知

    服务通知在微信开发中很常见,支付,审核等等都需要用到服务通知. 记录一下开发中用到的需求,以后直接复制. public static void senddingyue(String open_id,S ...

  3. java微信小程序发送消息

    首先参考文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subsc ...

  4. java 微信小程序-发送模板消息

    开发前准备工作 登录微信公众平台-小程序后台,在模板消息里面设置需要发送的模板,拿到模板id. 地址: https://mp.weixin.qq.com 找到微信官方文档-小程序开发-下发小程序和公众 ...

  5. 教你设置微信小程序的服务通知推送!搜狗文章

    场景碎碎念:嗨喽,小伙伴闷,今天的学习到咯.通过咱们快一个月的学习,已经把平台的组件学习的差不多了,当然咱闷这个功能组件是在不停更新.不断完善的.今天咱们来学下"模板消息"推送功能 ...

  6. java后台接收微信小程序发送的post请求参数

    java后台接收微信小程序发送的post请求参数 // 微信端:data数据要加上JSON转换JSON.stringify() wx.request({url: 'http://127.0.0.1:8 ...

  7. java家政后台代码下载_微信小程序家政服务预约系统毕业论文+前台源码+后台(JavaSSM)源码及Mysql数据库...

    摘  要 O2O模式能够充分的利用网站创立企业在O2O模式中的竞争优势,基于O2O模式的这一特点,本次毕业设计开发了微信小程序家政服务预约系统.该家政服务预约系统发挥了网络优势,采用O2O模式营销手段 ...

  8. 基于腾讯云服务器部署微信小程序后台服务(Python+Django)

    一 前言 微信小程序,相信大家早已熟知,它是一种无需下载安装即可使用的轻型应用,具有跨平台和接近Native App性能体验的优势.从开发模式上说,它是前后端分离的,微信小程序负责实现前端应用,后端服 ...

  9. 牛逼的uniapp+Java微信小程序商城来了

    牛逼的uniapp+Java微信小程序商城来了 减少重复造轮子,开源微信小程序商城(前后端开源:uniapp+Java),秒杀.优惠券.多商户.直播卖货.分销等功能.快速搭建一个属于自己的微信小程序商 ...

  10. 微信小程序通过服务号推送模板消息

    前言 公司要做一款新的微信小程序,因为业务需求要加入消息推送.因为之前APP是通过服务号推送给用户消息的,所以微信小程序要做消息推送也是首先想到了通过服务号推送.事实上在使用过程中服务号推送还是非常好 ...

最新文章

  1. OpenCASCADE:绘制测试线束之入门
  2. cmd 调用webservice接口_c# 三种方法调用WebService接口
  3. sqoop 增量导入mysql_sqoop增量导入数据库
  4. linux中的du 命令详解
  5. php环境搭建sqlserver,ThinkPHP5.0/5.1对接SQLServer数据库(宝塔环境)
  6. C#编号的ActiveX控件采用CAB的布署方式实例
  7. python matplotlib数据可视化_Python - matplotlib 数据可视化
  8. 344.Reverse String
  9. Type Dynamic Web Module 4.0 requires Java 1.8 or newer----彻底杀死Bug
  10. 遗传优化算法优化LSTM结构-准确率
  11. 前台js限制上传图片质量大小和尺寸
  12. Rife算法的Matlab实现
  13. sqlite数据库保存聊天记录
  14. 解压版tomcat7配置
  15. 硬件--如何安全删除USB后不重新插拔而自动重连
  16. R 两表格跟据某列相同值进行合并
  17. jupyter notebook 打开md文件
  18. Android Gatekeeper梳理
  19. 1761:神奇的口袋(2)
  20. 拉格朗日乘数求极值方法

热门文章

  1. python实现MD5加密工具
  2. 浅谈软件工程学习心得
  3. javascript继承的几种方式
  4. chrome插件开发(Demo案例)
  5. C# GIF图片的分解以及合成
  6. 怎么设置电脑防火墙ping启用_如何通过windows防火墙启用和禁用ping命令
  7. linux驱动下载中心,Kvaser Linux驱动程序| Linux驱动程序和SDK开发包
  8. lora终端连接云服务器_云服务器如何连接LoRa网关
  9. html 中 div 盒子上下垂直居中显示
  10. 【巧用百度地图】—百度地图生成器(直接获取代码)