小程序:

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失败log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInteger("errcode"), jsonObject.getString("errmsg"));}}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;}/*** 发送 https 请求* * @param requestUrl 请求地址* @param requestMethod 请求方式(GET、POST)* @param outputStr 提交的数据* @return JSONObject(通过 JSONObject.get(key) 的方式获取 JSON 对象的属性值)*/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) {log.error(" 连接超时:{}", ce);} catch (Exception e) {log.error("https 请求异常:{}", e);}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. 小程序发送模板消息给用户 —— 一次性模板实现“长期订阅”

    大家好!我是我玩亚索我会C,在写小程序时,我们会有向用户发送消息的需求,比如发送提醒通知,或者是一些重要通知来形成一个服务的闭环.这就要用到微信的发送消息功能了,下面我使用Java语言来详细演示下如何 ...

  2. 小程序发送模板消息小结

    小程序发送模板消息 package com.litte.util;import com.litte.entity.templateMessage.TemplateMessage; import com ...

  3. 《微信小程序——发送模板消息》详细步骤

    第一步:获取access_token 第一步详情:因为access_token在微信公众号还是小程序,在一个月之内都有获取次数的限制,并且一个access_token只有2小时的有效期:所以每当我们获 ...

  4. 小程序发送模板消息form_id的获取

    关于小程序发送模板消息form_id获取的问题 第一种可以设置一个隐藏的表单 在form表单里加入report-submit 当用户点击时 会生成相对应的form_id 模板消息一般是跟用户交互时返回 ...

  5. php+实现群发微信模板消息_使用php实现微信小程序发送模板消息(附代码)

    本篇文章给大家带来的内容是关于使用php实现微信小程序发送模板消息(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 本章将会简单说一下微信小程序的模板消息发送,相对来说比较简 ...

  6. 微信小程序发送模板消息demo

    一.登陆微信公众号,选中模板消息,添加需要的模板, 二.在 .properties 配置文件中,记录模板ID 三.模板文件配置, -SendTemplateMessageController publ ...

  7. 微信小程序发送模板消息踩的坑

    在微信的微信小程序中,微信提供了和微信服务号相同的模板消息功能. 但是,虽然都是发送模板消息,小程序和服务号的模板消息的使用还是有差别的. 对于微信服务号的模板消息只要通过查看文档就能够知道我们使用模 ...

  8. java发送小程序模板消息,记录_小程序发送模板消息

    package com.mj.frame.entity.resp; import java.io.Serializable; import java.util.List; import java.ut ...

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

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

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

    1 添加一个小程序的消息模板,获取到模板id,存储到数据库中,方便以后修改调用 这里有个坑,就是 form_id, 这个是用户触发表单事件的表单id,需要存储到数据库中,给这个表单提交以后的数据,添加 ...

最新文章

  1. liuux/ Unix 文件管理命令(三)
  2. 【Linux系统编程应用】 V4L2编程基础(一)
  3. 28. 实现 strStr()---LeetCode---JAVA(今天又是一行超人)
  4. 1051. 复数乘法 (15)
  5. Java ObjectInputStream readByte()方法与示例
  6. fread读取同一个文件得到缓冲区大小不同_缓冲区——计算机科学
  7. 模块化(AMD、CMD、CommonJS、ES6)
  8. 基于MATLAB的平面刚架有限元分析,基于MATLAB的平面刚架静力分析.pdf
  9. 蓝桥杯 ADV-135 算法提高 三角形面积
  10. eclipse中支持python
  11. MSIL实用指南-struct的生成和操作
  12. 科立捷默认频率_科立捷对讲机频率
  13. GD32F103使用串口DMA收+发 信息(无中断)
  14. 抖音用什么编程语言_抖音app软件开发流程是什么,主要运用的开发工具以及语言是什么?...
  15. 【SpringSecurity】SpringSecurity2.7.x 的使用(03)
  16. 华东师范学院计算机模拟试卷,华东师范大学计算机组成原理模拟卷
  17. 深入原生冰山安全体系,详解华为云安全服务如何构筑全栈安全
  18. 校园导游系统_C语言实现_Dijkstra(迪杰斯特拉算法)_数据结构
  19. grunt 使用教程及步骤
  20. 软件初始化失败解决办法

热门文章

  1. Python代码画喜羊羊怎么画_青少年编程:用Python探究数学(1)
  2. python 豆瓣电影top250_Python数据可视化:豆瓣电影TOP250
  3. 5种方案实现订单30分钟未支付,则自动取消
  4. (CCTV2视频)中国动画80年
  5. 王禹偁:万壑有声含晚籁,数峰无语立斜阳
  6. wing ftp server网页无法访问
  7. MIMO技术原理、概念、现状简介
  8. [读史思考] 魏王真的被张仪忽悠瘸了吗?
  9. ERROR: configuration failed for package ‘stringi’
  10. 废旧闲置的笔记本除了电脑回收,这两招也很实用!