模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。

1、模板消息调用时主要需要模板ID和模板中各参数的赋值内容;
2、模板中参数内容必须以".DATA"结尾,否则视为保留字;
3、模板保留符号"{{ }}"。

Java项目里的实现方法:

1、模板消息的模板内容组成有两种方式

前台页面组装好传递到后台(eg:body):

$.ajax({type: "POST",//提交类型url: "${pageContext.request.contextPath}/SendMs/sendTemplateMessages",data: {body:JSON.stringify({touser: '接收消息用户的openId',template_id: '模板消息的模板Id',data: {'first': {'value': '您的订单通知>_<','color': '#173177'},'keyword1': {'value': '1001001010','color': '#173177'},'keyword2': {'value': '蛋炒饭不加蛋','color': '#173177'},'keyword3': {'value': '10¥','color': '#173177'},'remark': {'value': '感谢您的光顾,祝您生活愉快!*_*','color': '#173177'}}})},dataType:"json",success: function(m){   }});

前台没有传模板消息,则后台自己组装 (eg:wechatTemplateStr):

注:JSONArray将类转换成模板消息字符串,转换之后会有一个中括号,需要用replace方法将中括号去掉才是模板消息的正确格式,不然调微信的发送模板消息接口会报格式不正确错误。(切记)

            //前台没有传模板消息内容,则后台自己组装 eg:wechatTemplateStrWechatTemplate wechatTemplate = new WechatTemplate();wechatTemplate.setTemplate_id(AlipayController.template_id);wechatTemplate.setTouser("oifR00Qa_h9TawBbnXa3S54mEpew");Map<String,TemplateData> mapdata = new HashMap<>();// 封装模板数据TemplateData first = new TemplateData();first.setValue(AlipayController.templateHead);first.setColor("#173177");mapdata.put("first", first);TemplateData keyword1 = new TemplateData();keyword1.setValue(orderNumber);keyword1.setColor("#173177");mapdata.put("keyword1", keyword1);TemplateData keyword2 = new TemplateData();keyword2.setValue(commodityDetails);keyword2.setColor("#173177");mapdata.put("keyword2", keyword2);TemplateData keyword3 = new TemplateData();keyword3.setValue(orderAmount);keyword3.setColor("#173177");mapdata.put("keyword3", keyword3);TemplateData remark = new TemplateData();remark.setValue(AlipayController.remark);remark.setColor("#173177");mapdata.put("remark", remark);wechatTemplate.setData(mapdata);//通过JSONArray将模板类转换为字符串JSONArray wechatTemplatearray =  JSONArray.fromObject(wechatTemplate);String wechatTemplateStr = wechatTemplatearray.toString().replace("[", " ");wechatTemplateStr = wechatTemplateStr.toString().replace("]", " ");

2、后台调用微信公众号接口发送模板消息

        import net.sf.json.JSONArray;import com.alibaba.fastjson.JSONObject;public static String template_id = "模板消息的模板Id";public static String templateHead = "您的订单通知>_<";public static String remark = "感谢您的光顾,祝您生活愉快!*_*";@ResponseBody@RequestMapping(value = "sendTemplateMessages")public String sendTemplateMessages(String body,String openId,String orderNumber,String commodityDetails,String orderAmount) { try {//获取公众号access_token(GET请求)URL url = new URL("https://api.weixin.qq.com/cgi-bin/token?appid=&secret=&grant_type=client_credential");HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 在连接之前设置属性// Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");// 设置打开与此URLConnection引用的资源的通信链接时使用的指定超时值(以毫秒为单位)conn.setConnectTimeout(10000);// 将读取超时设置为指定的超时时间,以毫秒为单位。// conn.setReadTimeout(60000);conn.setRequestMethod("GET");// Post 请求不能使用缓存conn.setUseCaches(false);// 建立连接conn.connect();// 获取响应BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;String result = "";while ((line = reader.readLine()) != null) {result += line;}reader.close();conn.disconnect();JSONObject jsStr = JSONObject.parseObject(result);//Json对象转换成java对象,获取到公众号access_tokenWeChatToken weChatToken = (WeChatToken) JSONObject.toJavaObject(jsStr,WeChatToken.class);//发送模板消息(POST请求)URL msurl = new URL("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + weChatToken.access_token);HttpURLConnection msconn = (HttpURLConnection) msurl.openConnection();// 在连接之前设置属性// Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型msconn.setRequestProperty("Content-Type", "application/json; charset=utf-8");// 设置打开与此URLConnection引用的资源的通信链接时使用的指定超时值(以毫秒为单位)msconn.setConnectTimeout(30000);// 将读取超时设置为指定的超时时间,以毫秒为单位。// conn.setReadTimeout(60000);// 发送POST请求必须设置如下两行msconn.setDoOutput(true);msconn.setDoInput(true);msconn.setRequestMethod("POST");// Post 请求不能使用缓存msconn.setUseCaches(false);// 建立连接msconn.connect();OutputStream outputStream = msconn.getOutputStream();//前台如果传来消息模板则直接使用,如果未传则自己创建消息模板//注意编码格式,防止中文乱码//前台组装好模板消息,则直接使用  eg:body//outputStream.write(body.getBytes("UTF-8"));//前台没有传模板消息,则后台自己组装 eg:wechatTemplateStrWechatTemplate wechatTemplate = new WechatTemplate();wechatTemplate.setTemplate_id(AlipayController.template_id);wechatTemplate.setTouser(openId);Map<String,TemplateData> mapdata = new HashMap<>();// 封装模板数据TemplateData first = new TemplateData();first.setValue(AlipayController.templateHead);first.setColor("#173177");mapdata.put("first", first);TemplateData keyword1 = new TemplateData();keyword1.setValue(orderNumber);keyword1.setColor("#173177");mapdata.put("keyword1", keyword1);TemplateData keyword2 = new TemplateData();keyword2.setValue(commodityDetails);keyword2.setColor("#173177");mapdata.put("keyword2", keyword2);TemplateData keyword3 = new TemplateData();keyword3.setValue(orderAmount);keyword3.setColor("#173177");mapdata.put("keyword3", keyword3);TemplateData remark = new TemplateData();remark.setValue(AlipayController.remark);remark.setColor("#173177");mapdata.put("remark", remark);wechatTemplate.setData(mapdata);//通过JSONArray将模板类转换为字符串JSONArray wechatTemplatearray =  JSONArray.fromObject(wechatTemplate);String wechatTemplateStr = wechatTemplatearray.toString().replace("[", " ");wechatTemplateStr = wechatTemplateStr.toString().replace("]", " ");outputStream.write(wechatTemplateStr.getBytes("UTF-8"));outputStream.close();// 获取响应BufferedReader msreader = new BufferedReader(new InputStreamReader(msconn.getInputStream()));String msline;String msresult = "";while ((msline = msreader.readLine()) != null) {msresult += msline;}msreader.close();msconn.disconnect();return msresult;} catch (MalformedURLException e) {e.printStackTrace();} catch (SocketTimeoutException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return "send false";}

3、组装模板消息需要用到的几个类

import java.util.Map;public class WechatTemplate {private String touser;private String template_id;private String url;private Map<String, TemplateData> data;public String getTouser() {return touser;}public void setTouser(String touser) {this.touser = touser;}public String getTemplate_id() {return template_id;}public void setTemplate_id(String template_id) {this.template_id = template_id;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public Map<String, TemplateData> getData() {return data;}public void setData(Map<String, TemplateData> data) {this.data = data;}
}
public class TemplateData {private String value;private String color;public String getValue() {return value;}public void setValue(String value) {this.value = value;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}
}
public class WeChatToken {public String access_token ;public int expires_in;
}

以上所说就可以完成公众号给微信用户发送模板消息,希望能帮助到您。(*^▽^*)

(Java)微信公众号发送模板消息相关推荐

  1. springboot微信公众号发送模板消息

    springboot微信公众号发送模板消息 1.准备工作 申请你所需要模板 配置ip白名单(你所需要部署的服务器ip) 2.编写模板消息的请求参数封装类 import java.util.HashMa ...

  2. 微信公众号 发送模板消息和获取关注公众号人数

    微信公众号发送模板消息 1.创建模板,拿到模板ID 2.创建发送消息工具类 import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JS ...

  3. php 微信模板消息url,【求助】php 微信公众号 发送模板消息改变不了颜色

    php 微信公众号 发送模板消息改变不了颜色 不知道为什么 1.模板消息内容: 2.发送的模板消息效果: 序列化的模板消息内容如下: 大家可以测试下,touser需要另外添加下 a:4:{s:11:& ...

  4. php之微信公众号发送模板消息

    讲一下开发项目中微信公众号发送模板消息的实现过程(我用的还是Thinkphp5.0).先看一下效果,如图: 就是类似于这样的,下面讲一下实现过程: 第一步:微信公众号申请模板消息权限: 立即申请: 申 ...

  5. 微信公众号 java发送消息_微信公众号发送模板消息 Java实现。

    本博文是测试公众号调用模板接口测试.请不要完全复制我的代码.里面的测试代码中有本人测试号的微信模板id.麻烦替换成自己的可以吗? 第一步:创建模板信息 第二步:准备模板代码实体类用到的属性自行加入就行 ...

  6. java 微信开发收到乱码,微信公众号发送模板消息中文乱码(java)

    使用 restTemplate 发送. /** * 微信模板类 */ @Data public class WeChatTemplate implements Serializable { priva ...

  7. 使用微信公众号发送模板消息

    使用微信公众号 API 本文所有内容均使用微信公众号测试号平台来演示 打开公众平台的测试号管理页面后我们可以在页面中看到测试号的信息 图中的 appId 和 appSecret 就是我们需要用到的 图 ...

  8. 微信开放平台(第三方平台)代替微信公众号发送模板消息(基于lavarel框架开发,EasyWeChat)

    1.公众号必须得把模板消息授权到第三方平台. 2.我用的是 EasyWeChat 3.通过接口修改账号所属行业 (实质上就是开通模板消息) //修改账号所属行业public function set_ ...

  9. .Net Core 3.1实现微信公众号发送模板消息,且跳转微信小程序

    .Net Core 3.1开发微信相关 背景 微信公众号和小程序关联 微信小程序获取UnionId及OpenId 微信公众号获取UnionId及OpenId 背景 公司需要将内部产品的审批放到微信小程 ...

最新文章

  1. Jeff Dean:我们写了一份「稀疏模型设计指南」,请查收
  2. java 的xml_详解Java解析XML的四种方法
  3. ⑨④-如果不发展就可能面临生存窘境
  4. SAP Fiori里的List是如何做到懒加载Lazy load的
  5. Wireshark 命令行捕获数据
  6. 金融数据公司发展趋势小探
  7. 关于Unable to load annotation processor factory 的故障
  8. JAVA作业-简易计算器
  9. 如何在Android模拟器中模拟GPS位置?
  10. 黑莓开发新手入门教学帖,如何制作一个能控制LED颜色的程序(一)
  11. 无法修改计算机时间权限,无法修改系统时间怎么办
  12. Lumion和Enscape渲染器有什么区别?哪个适合你
  13. 正弦定理c语言,正弦定理练习题
  14. 软件测试人员考核办法
  15. 微信 Android 终端内存优化实践
  16. 【比特鹏哥C语言_1.初识C语言】
  17. 解析服务器独享与共享的区别
  18. java学习之服务器第26天( --form表单-- 四大域对象--cookie)
  19. 京东方校园招聘页面重构
  20. C语言编程计算1*2*3+3*4*5+...+99*100*101的值

热门文章

  1. STM32+RTThread串口不定长接收
  2. ESP32_驱动TFT彩屏_Arduino
  3. python二进制十进制转化
  4. STC单片机程自动序软下载(软下载)实现
  5. java毕业设计人职匹配推荐系统(附源码、数据库)
  6. python绘制五环
  7. 5.1后意外收获红雪莲
  8. Win10下 pcl1.9.1 +vs2017配置教程
  9. 新生支付对商户后续管理不力及支付接口监测不到位被央行处罚
  10. python文件输出exe文件反汇编_【python】控制台python代码导出成exe文件