微信模板消息开发总结——7.26

2023-11-05 20:10

本文主要是介绍微信模板消息开发总结——7.26,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求:A管理员在微信端提交用户加入群组,给B高级管理员审核。

           B管理员审核成功后,微信公众号会发送一个消息给A管理员,提示新增成功。

微信后台模板消息接口:

 

官方文档:

        请求需要三个参数——

        touser:用户的微信openId

        template_id:模板消息id

        topcolor:字体颜色

        data:替换模板消息内的具体数据

代码——

接口端:

            …………String openId = null;String userName = null;if (jsonObject.containsKey("flag") && jsonObject.getInteger("flag") == 1) {// 获得提交人的信息User user = mbUserService.searchOpenIdById(id);if (user == null) {logger.error("系统错误");} else {// 得到提交人的openid 用户名openId = user.getOpenId();userName = user.getUserName();}// 审核成功之后,发送模板消息Template tem = new Template();tem.setTemplateId("E1P3fwW5GGSFdGraAuOjcVy-6xRNC2c78LKslYoumxk");tem.setTopColor("#00DD00");tem.setToUser(openId);// 模板消息具体url,没找到tem.setUrl("");List<TemplateParam> paras = new ArrayList<TemplateParam>();paras.add(new TemplateParam("OperaUser", userName, "#0044BB"));paras.add(new TemplateParam("UserTel", phone, "#0044BB"));paras.add(new TemplateParam("Group", "出租车司机", "#0044BB"));paras.add(new TemplateParam("Status", "成功", "#0044BB"));tem.setTemplateParamList(paras);// 获取accessTokenString token = null;try {token = WeiXinUtil.getAccessToken().getToken();} catch (Exception e) {e.printStackTrace();}// 调用发送消息boolean result = sendTemplateMsg(token, tem);logger.info("模板消息发送结果:" + result);

工具类:

public class WeiXinUtil {@Value("${wx.appId}")private static String APPID;@Value("${wx.appsecret}")private static String APPSECRET;// 从微信后台拿到APPID和APPSECRET 并封装为常量// private static final String APPID = "wx93ee9c70c625f281";// private static final String APPSECRET = "93e787d23e2e1e5c45d1c7f5cdc6fe79";private static final String ACCESS_TOKEN_URL ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";/*** 编写Get请求的方法。但没有参数传递的时候,可以使用Get请求* * @param url 需要请求的URL* @return 将请求URL后返回的数据,转为JSON格式,并return*/public static JSONObject doGetStr(String url) throws ClientProtocolException, IOException {DefaultHttpClient client = new DefaultHttpClient();// 获取DefaultHttpClient请求HttpGet httpGet = new HttpGet(url);// HttpGet将使用Get方式发送请求URLJSONObject jsonObject = null;HttpResponse response = client.execute(httpGet);// 使用HttpResponse接收client执行httpGet的结果HttpEntity entity = response.getEntity();// 从response中获取结果,类型为HttpEntityif (entity != null) {String result = EntityUtils.toString(entity, "UTF-8");// HttpEntity转为字符串类型jsonObject = JSONObject.parseObject(result);// 字符串类型转为JSON类型}return jsonObject;}/*** 编写Post请求的方法。当我们需要参数传递的时候,可以使用Post请求* * @param url 需要请求的URL* @param outStr 需要传递的参数* @return 将请求URL后返回的数据,转为JSON格式,并return*/public static JSONObject doPostStr(String url, String outStr) throws ClientProtocolException, IOException {DefaultHttpClient client = new DefaultHttpClient();// 获取DefaultHttpClient请求HttpPost httpost = new HttpPost(url);// HttpPost将使用Get方式发送请求URLJSONObject jsonObject = null;httpost.setEntity(new StringEntity(outStr, "UTF-8"));// 使用setEntity方法,将我们传进来的参数放入请求中HttpResponse response = client.execute(httpost);// 使用HttpResponse接收client执行httpost的结果String result = EntityUtils.toString(response.getEntity(), "UTF-8");// HttpEntity转为字符串类型jsonObject = JSONObject.parseObject(result);// 字符串类型转为JSON类型return jsonObject;}/*** 获取AccessToken* * @return 返回拿到的access_token及有效期*/public static AccessToken getAccessToken() throws ClientProtocolException, IOException {AccessToken token = new AccessToken();String url = ACCESS_TOKEN_URL.replace("APPID", APPID).replace("APPSECRET", APPSECRET);// 将URL中的两个参数替换掉JSONObject jsonObject = doGetStr(url);// 使用刚刚写的doGet方法接收结果if (jsonObject != null) { // 如果返回不为空,将返回结果封装进AccessToken实体类token.setToken(jsonObject.getString("access_token"));// 取出access_tokentoken.setExpireIn(jsonObject.getInteger("expires_in"));// 取出access_token的有效期}return token;}
}

发送模板消息调用方法:

 // 发送模板消息public static boolean sendTemplateMsg(String token, Template template) {boolean flag = false;String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";requestUrl = requestUrl.replace("ACCESS_TOKEN", token);JSONObject jsonResult = CommonUtil.httpsRequest(requestUrl, "POST", template.toJSON());if (jsonResult != null) {int errorCode = jsonResult.getInteger("errcode");String errorMessage = jsonResult.getString("errmsg");if (errorCode == 0) {flag = true;} else {System.out.println("模板消息发送失败:" + errorCode + "," + errorMessage);flag = false;}}return flag;}

发送消息时需要的CommonUtil

public class CommonUtil {public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) { JSONObject jsonObject = null;StringBuffer buffer = new StringBuffer();  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 httpUrlConn = (HttpsURLConnection) url.openConnection();  httpUrlConn.setSSLSocketFactory(ssf);  httpUrlConn.setDoOutput(true);  httpUrlConn.setDoInput(true);  httpUrlConn.setUseCaches(false);  // 设置请求方式(GET/POST)  httpUrlConn.setRequestMethod(requestMethod);  if ("GET".equalsIgnoreCase(requestMethod)) {httpUrlConn.connect();  } // 当有数据需要提交时  if (null != outputStr) {  OutputStream outputStream = httpUrlConn.getOutputStream();  // 注意编码格式,防止中文乱码  outputStream.write(outputStr.getBytes("UTF-8"));  outputStream.close();  }  // 将返回的输入流转换成字符串  InputStream inputStream = httpUrlConn.getInputStream();  InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  String str = null;  while ((str = bufferedReader.readLine()) != null) {  buffer.append(str);  }  bufferedReader.close();  inputStreamReader.close();  // 释放资源  inputStream.close();  inputStream = null;  httpUrlConn.disconnect();  jsonObject = JSONObject.parseObject(buffer.toString());  } catch (ConnectException ce) {  ce.printStackTrace();} catch (Exception e) {  e.printStackTrace();}  return jsonObject;  }public static String httpRequest(String requestUrl, String requestMethod, String outputStr) { StringBuffer buffer = new StringBuffer();  try {  URL url = new URL(requestUrl);  HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  httpUrlConn.setDoOutput(true);  httpUrlConn.setDoInput(true);  httpUrlConn.setUseCaches(false);  // 设置请求方式(GET/POST)  httpUrlConn.setRequestMethod(requestMethod);  if ("GET".equalsIgnoreCase(requestMethod)) {httpUrlConn.connect();  } // 当有数据需要提交时  if (null != outputStr) {  OutputStream outputStream = httpUrlConn.getOutputStream();  // 注意编码格式,防止中文乱码  outputStream.write(outputStr.getBytes("UTF-8"));  outputStream.close();  }  // 将返回的输入流转换成字符串  InputStream inputStream = httpUrlConn.getInputStream();  InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  String str = null;  while ((str = bufferedReader.readLine()) != null) {  buffer.append(str);  }  bufferedReader.close();  inputStreamReader.close();  // 释放资源  inputStream.close();  inputStream = null;  httpUrlConn.disconnect();  //jsonObject = JSONObject.fromObject(buffer.toString());  } catch (ConnectException ce) {  ce.printStackTrace();} catch (Exception e) {  e.printStackTrace();}  return buffer.toString();  }public static String urlEncodeUTF8(String source){String result = source;try {result = java.net.URLEncoder.encode(source,"utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}public static String httpsRequestForStr(String requestUrl, String requestMethod, String outputStr) { String result="";StringBuffer buffer = new StringBuffer();  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 httpUrlConn = (HttpsURLConnection) url.openConnection();  httpUrlConn.setSSLSocketFactory(ssf);  httpUrlConn.setDoOutput(true);  httpUrlConn.setDoInput(true);  httpUrlConn.setUseCaches(false);  // 设置请求方式(GET/POST)  httpUrlConn.setRequestMethod(requestMethod);  if ("GET".equalsIgnoreCase(requestMethod)) {httpUrlConn.connect();  } // 当有数据需要提交时  if (null != outputStr) {  OutputStream outputStream = httpUrlConn.getOutputStream();  // 注意编码格式,防止中文乱码  outputStream.write(outputStr.getBytes("UTF-8"));  outputStream.close();  }  // 将返回的输入流转换成字符串  InputStream inputStream = httpUrlConn.getInputStream();  InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  String str = null;  while ((str = bufferedReader.readLine()) != null) {  buffer.append(str);  }  bufferedReader.close();  inputStreamReader.close();  // 释放资源  inputStream.close();  inputStream = null;  httpUrlConn.disconnect();  result=buffer.toString();  } catch (ConnectException ce) {  ce.printStackTrace();} catch (Exception e) {  e.printStackTrace();}  return result;  }
}

 


                                      

这篇关于微信模板消息开发总结——7.26的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352197

相关文章

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用