100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > (Java)微信公众号发送模板消息

(Java)微信公众号发送模板消息

时间:2021-07-27 01:47:00

相关推荐

(Java)微信公众号发送模板消息

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

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./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./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;}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。