微信公众号发送模板消息

1.创建模板,拿到模板ID

2.创建发送消息工具类

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.util.HashMap;
import java.util.List;
import java.util.Map;@Component
public class WeixinUtil {private static Logger logger = LoggerFactory.getLogger(WeixinUtil.class);private static final String WEIXIN_PREFIX = "https://api.weixin.qq.com/cgi-bin";@Value("${wx.appID}")private String appID;@Value("${wx.secret}")private String secret;@Value("${wx.domainName}")private String domainName;private static String PARAM_ACCESS_TOKEN = "";private static long TOKEN_START = 0;private static int expiresIn = 7200;/*** 做一个缓存的access_token*/private String getAccessToken() {if (TOKEN_START == 0) {PARAM_ACCESS_TOKEN = getNormalAccessToken();TOKEN_START = System.currentTimeMillis();} else if (System.currentTimeMillis() - TOKEN_START > expiresIn) {PARAM_ACCESS_TOKEN = getNormalAccessToken();TOKEN_START = System.currentTimeMillis();}return PARAM_ACCESS_TOKEN;}/*** 发送信息** @param params*/private void sendInfo(String params) {String url = WEIXIN_PREFIX + "/message/template/send?access_token=" + getAccessToken();String result = HttpUtil.post(url, params);logger.info(">>>发送消息:" + result);System.out.println(">>>发送消息:" + result);}private static String getNormalAccessTokenURL() {return WEIXIN_PREFIX + "/token";}/*** 获取普通的AccessToken*/private String getNormalAccessToken() {Map<String, Object> map = new HashMap<>();map.put("grant_type", "client_credential");map.put("appid", appID);map.put("secret", secret);String result = HttpUtil.get(getNormalAccessTokenURL(), map);if (result != null) {JSONObject jsonObject = JSONObject.parseObject(result);PARAM_ACCESS_TOKEN = jsonObject.getString("access_token");expiresIn = jsonObject.getInteger("expires_in");}return PARAM_ACCESS_TOKEN;}public void sendMessage(String toUser, String templateID, String subURL, String first,List<String> keywordList, String remark) {MessageEntity messageEntity = new MessageEntity();messageEntity.setTouser(toUser);messageEntity.setTemplate_id(templateID);messageEntity.setUrl(domainName + subURL);messageEntity.setData(getMapData(first, keywordList, remark));sendInfo(messageEntity.toString());}private static Map<String, Map<String, String>> getMapData(String f1, List<String> keywordList, String rmk) {Map<String, Map<String, String>> data = new HashMap<>(5);Map<String, String> first = new HashMap<>(2);first.put("color", "#173177");first.put("value", f1);for (int i = 1; i <= keywordList.size(); i++) {Map<String, String> subMap = new HashMap<>(2);subMap.put("color", "#173177");subMap.put("value", keywordList.get(i - 1));data.put("keyword" + i, subMap);}Map<String, String> remark = new HashMap<>(2);remark.put("color", "#173177");remark.put("value", rmk);data.put("first", first);data.put("remark", remark);return data;}/*** 获取关注当前公共号人数,还可以获取光柱公众号的openid列表** @return*/public int getConcernedPeople() {String url = WEIXIN_PREFIX + "/user/get?access_token=" + getAccessToken();try {String result = HttpUtil.get(url);if (result != null) {JSONObject jsonObject = JSONObject.parseObject(result);return (int) jsonObject.get("total");}} catch (Exception e) {logger.error(e.getMessage());return 0;}return 0;}
}
/*** 消息的发送需要json格式*/
class MessageEntity {private String touser;private String template_id;private String url;private Map<String, Map<String, String>> 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, Map<String, String>> getData() {return data;}public void setData(Map<String, Map<String, String>> data) {this.data = data;}@Overridepublic String toString() {return JSONObject.toJSONString(this);}
}

 在springboot中可以直接使用。其中appID和secret是微信公众号基础信息,domainName是网站域名(如果域名修改便于改动,也利于测试和生成环境部署)

用户点击消息查看详情,如果网址是http://www.xxx.com/a/p/123.html,这时候domainName就可以设置为http://www.xxx.com,如果后期域名改动或者测试生成环境切换,都可以通过配置文件进行修改,比较简单方便。

3.构建发送的信息并发送

        // 微信通知:先获取WeixinUtil对象,然后组织发送消息的信息String openid="openid";String templateID="templateID";String subURL = "/wx.html/p/detail?id=109&number=1591953944402";String first = "您的请假已被驳回";String remark = "备注消息";List<String> keywordList = new ArrayList<>(2);keywordList.add("已驳回");keywordList.add("请假时间过长");weixinUtil.sendMessage(openid, templateID, subURL, first, keywordList, remark);

微信公众号 发送模板消息和获取关注公众号人数相关推荐

  1. 公众号 接收规则 消息_微信公众平台 发送模板消息(Java接口开发)

    前言:最近一直再弄微信扫码推送图文消息和模板消息发送,感觉学习到了不少东西.今天先总结一下微信公众平台模板消息的发送.因为这个自己弄了很久,开始很多地方不明白,所以今天好好总结一下. 微信公众平台技术 ...

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

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

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

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

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

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

  5. java 模板接口开发_微信公众平台 发送模板消息(Java接口开发)

    前言:最近一直再弄微信扫码推送图文消息和模板消息发送,感觉学习到了不少东西.今天先总结一下微信公众平台模板消息的发送.因为这个自己弄了很久,开始很多地方不明白,所以今天好好总结一下. 微信公众平台技术 ...

  6. 公众号发送模板消息40165错误

    今天在做公众号发送模板消息的功能的时候报了一个错误"errcode":40165,"errmsg":"invalid weapp pagepath h ...

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

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

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

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

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

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

最新文章

  1. ISME|宏转录组揭示参与深海碳氮循环的微生物
  2. 对付感冒的十二种偏方
  3. rabbitmq相关开源代码c
  4. UIViewController 生命周期
  5. NYOJ_1013除法表达式
  6. Docker容器(配置+镜像建立及优化+镜像加速器制作)
  7. 益生菌可能导致的“菌血症”与死亡(调研手稿六)
  8. 51nod 1040最大公约数和(欧拉函数)
  9. java递归 优点缺点_java编程之递归算法总结
  10. c语言将数组元素循环右移3位,如何将一个数组的元素循环左移?
  11. php 白名单,php实现ip白名单黑名单功能
  12. Java equalsIgnoreCase() 方法
  13. PKIX path building failed
  14. idea格式化java代码,设置属性自动换行
  15. 光影精灵安装ubuntu20.04安装显卡驱动外界显示屏
  16. Warshall传递闭包算法
  17. 关于地理数据收集与处理的基本工具推荐(2)---10m精度的全球土地覆盖数据下载
  18. 笔记本重装windows系统,office全家桶消失的解决方案
  19. python:水果与设计模式-原型模式
  20. 远程终端工具Xshell、Xftp传输工具、VMware 、CentOS7的下载、安装和使用教程(完整版)

热门文章

  1. 有一种感觉,叫身不由己。。。
  2. 人脸识别漏洞频出?这里有个开源静默活体检测算法,超低运算量、工业级可用...
  3. 银弹谷V-DevSuite部署构件时提示无法连接到远程服务器
  4. 【编译原理】自下而上分析法 C++
  5. 十七:微信公众帐号开发-文本消息中换行符的使用
  6. MySQL中处理空值时要小心两个个陷阱
  7. 电磁铁的方向判定方法
  8. 电子工程可以报考二建_【电子信息工程专业能考二级建造师吗_2020年二级建造师】- 环球网校...
  9. cisco静态路由配置命令
  10. 挺进CSDN热搜榜,纪念一下