1. 创建消息模板实体对象
package com.htdz.ydkx.wxModelMsg.entity;public class Content {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;}
}
package com.htdz.ydkx.wxModelMsg.entity;public class MsgData {private  Content first;private  Content keyword1;private  Content keyword2;private  Content keyword3;private  Content keyword4;private  Content keyword5;private  Content remark;public Content getFirst() {return first;}public void setFirst(Content first) {this.first = first;}public Content getKeyword1() {return keyword1;}public void setKeyword1(Content keyword1) {this.keyword1 = keyword1;}public Content getKeyword2() {return keyword2;}public void setKeyword2(Content keyword2) {this.keyword2 = keyword2;}public Content getKeyword3() {return keyword3;}public void setKeyword3(Content keyword3) {this.keyword3 = keyword3;}public Content getKeyword4() {return keyword4;}public void setKeyword4(Content keyword4) {this.keyword4 = keyword4;}public Content getKeyword5() {return keyword5;}public void setKeyword5(Content keyword5) {this.keyword5 = keyword5;}public Content getRemark() {return remark;}public void setRemark(Content remark) {this.remark = remark;}
}
package com.htdz.ydkx.wxModelMsg.entity;public class TemplateMsg {//用户openidprivate String touser;//模板消息IDprivate String template_id;//详情跳转页面private String url;//模板数据封装实体private MsgData 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 MsgData getData() {return data;}public void setData(MsgData data) {this.data = data;}
}

消息模板

  1. 先获取用于发送消息模板的access_token,创建HttpClientService.java
//因为微信的access_token的有效期是2小时,所以用一个全局变量保存
//可以设置一个定时job,每隔1个半小时更新一次access_token
private static String ACCESS_TOKEN = "";/**
通过https get请求获取access_token
*/
public void sendHttpGetRequest(){String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";try{//替换url中的参数url = url.replace("APPID","公众号的appid");url = url.replace("APPSECRET","公众号的appsecret");//创建默认的httpclient客户端CloseableHttpClient client = HttpClients.createDefault();//通过请求的url初始化一个HttpGet请求HttpGet httpGet = new HttpGet(url);//通过客户端来执行请求CloseableHttpResponse response = client.execute(httpGet);//处理返回的结果//获得响应行 200:响应成功if(response.getStatusLine().getStatusCode() == 200){//获得响应体HttpEntity httpEntity = response.getEntity();String content = EntityUtils.toString(httpEntity,"utf-8");JSONObject jsonObject = JSONObject.parseObject(content);ACCESS_TOKEN = jsonObject.getString("access_token");}}catch (Exception e){e.printStackTrace();}}
  1. 发送模板消息方法(HttpClientService.java)
/*** 微信模板消息推送请求 http post 请求* @return*/public static JSONObject sendWXMsgRequest(String url,String data){JSONObject jsonObject = null;try {//创建默认的httpClient客户端CloseableHttpClient client = HttpClients.createDefault();//通过请求的url初始化一个httpPostHttpPost httpPost = new HttpPost(url);//参数设置httpPost.addHeader("Content-Type","application/json;charset=UTF-8");httpPost.addHeader("Accept","application/json");// 参数设置JSONObject obj = JSONObject.parseObject(data);// 解决中文乱码问题StringEntity stringEntity = new StringEntity(obj.toString(), "UTF-8");stringEntity.setContentEncoding("UTF-8");httpPost.setEntity(stringEntity);CloseableHttpResponse response = client.execute(httpPost);//获得响应行 200:响应成功if(response.getStatusLine().getStatusCode() == 200){//获得响应体HttpEntity httpEntity = response.getEntity();String content = EntityUtils.toString(httpEntity,"utf-8");logger.info("content:"+content);jsonObject = JSONObject.parseObject(content);}}catch (Exception e){e.printStackTrace();}return jsonObject;}
 /*** 获取微信token* @return*/public static String getToken(){return ACCESS_TOKEN;}
  1. 创建TemplateSendImpl.java类,调用sendWXMsgRequest()方法
package com.htdz.ydkx.wxModelMsg.service.impl;import com.alibaba.fastjson.JSONObject;
import com.htdz.ydkx.wxModelMsg.entity.Content;
import com.htdz.ydkx.wxModelMsg.entity.MsgData;
import com.htdz.ydkx.wxModelMsg.entity.TemplateMsg;
import com.htdz.ydkx.wxModelMsg.service.TemplateSendI;
import com.htdz.ydkx.wxModelMsg.util.HttpClientService;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;@Service("templateSend")
public class TemplateSendImpl implements TemplateSendI {private static final Logger logger = Logger.getLogger(TemplateSendImpl.class);@Overridepublic String sendTemplateMsg(String content) {String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";String access_token = HttpClientService.getToken();String returnMsg = "";try{url = url.replace("ACCESS_TOKEN",access_token);//调用微信微信模板推送接口JSONObject jsonObject = HttpClientService.sendWXMsgRequest(url,content);Integer errorCode = jsonObject.getInteger("errcode");if(null != jsonObject){if(errorCode == 0){returnMsg = "模板推送成功!";}else{returnMsg = "模板推送失败!";}}else{returnMsg = "模板推送失败!";}}catch (Exception e){e.printStackTrace();}return returnMsg;}
}
  1. 设置定时任务,生成access_token
package com.htdz.ydkx.job;import com.htdz.ydkx.wxModelMsg.util.HttpClientService;
import org.apache.log4j.Logger;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class TemplateMsgSendJob {private static final Logger logger = Logger.getLogger(TemplateMsgSendJob.class);@Scheduled(cron="0 30 */1 * * ?")public void test(){logger.info("开始调用获取微信token方法TemplateMsgSendJob");try{HttpClientService httpClientService = new HttpClientService();httpClientService.sendHttpGetRequest();}catch (Exception e){e.printStackTrace();}logger.info("结束调用获取微信token方法");}}

Java实现微信公众号模板消息推送给用户相关推荐

  1. Java对接微信公众号模板消息推送(架包WxJava)

    内容有点多,请耐心! 最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offi ...

  2. Java对接微信公众号模板消息推送

    最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offiaccount/Get ...

  3. Nodejs + express 开发微信公众号模板消息推送功能

    第一步:申请测试号 1.打开微信测试号申请平台 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.点击"登录&q ...

  4. 微信公众号模板消息推送(PHP)

    1.发送模板消息 public function send_notice(){$access_token = '';//模板消息$json_template = $this->json_temp ...

  5. 【Java中实现微信公众号模板消息推送】

    主要流程: 1.在微信公众测试平台上注册账号,关注测试公众号,新增消息模板 2.拿到需要的参数openId appId appsecret 模板Id后进行开发 微信公众平台测试号管理地址 https: ...

  6. 微信公众号模板消息推送(附上完整代码)

    官方文档 会用到的调用函数 import logging import requests import time from pickle import dumps, loadsfrom request ...

  7. 微信公众号模板消息推送问题汇总

    总结:经常遇到的微信模版消息推送返回失败情况! 1.{"errcode":40037,"errmsg":"invalid template_id hi ...

  8. 公众平台模板消息所在行业_微信公众号模板消息功能怎么快速推送?

    公众号平台上模板消息功能仅支持添加模板和更改所在行业,不支持模板消息推送,如果想要实现更多功能效果,可以使用微号帮平台的模板消息群发功能实现,也可以通过公众号平台的接口自己开发实现功能,均可以达到微信 ...

  9. java程序集成微信公众号模板消息功能

    要在 Java 程序中集成微信公众号模板消息功能,您需要按照以下步骤进行: 在微信公众平台上申请并获取您的公众号的 appid 和 appsecret. 使用 appid 和 appsecret 调用 ...

最新文章

  1. LeetCode Reverse String(字符串反转)
  2. Scala _02基础
  3. python 测试mysql数据库_Python操作MySQL数据库----继续安装和测试
  4. 初读CLR Via C# 之 IL、CTS、CLS
  5. iOS学习之UItableView
  6. c语言变量强制转换,C语言——“=”中的强制类型转换
  7. abap 帮助文档 中文_谷歌的软件工程 读书笔记(十)文档
  8. java对象的内存结构_Java对象在内存中的结构分析
  9. 同步,异步,阻塞,非阻塞?
  10. huffman编码的程序流程图_基于哈夫曼编码的压缩解压程序(C 语言)
  11. 短期出差北京个人所见所闻所感
  12. [CVPR2021]NeRV: Neural Reflectance and Visibility Fields for Relighting and View Synthesis
  13. 高德地图自定义贴图图层
  14. ACM2021辽宁省赛:CDEFGILM
  15. webpack--黑洞级入门
  16. MySQL数据查询之多表查询
  17. 乱拔插U盘,导致U盘变成RAW未初始化格式,容量大小为0。
  18. 零基础学java——面向对象(三)
  19. DHTML---HTML5
  20. 电磁兼容试验项目之谐波电流试验

热门文章

  1. 使用matplotlib绘图时坐标轴中文显示乱码的解决方法
  2. 数字次数统计器----数字出现次数统计器
  3. monolog 存入mysql_Monolog-PHP日志类库介绍
  4. 男人疼爱老婆98个经典细节
  5. 一文讲透植物内生菌研究怎么做 | 微生物专题
  6. 水饺,值得长期吃下去
  7. 3D绘图之matplotlib
  8. OpenGL 纹理贴图
  9. mac电脑循环次数多少算新_Mac电脑上的活动监视器如何使用
  10. 运动蓝牙耳机哪款性能好?2020最受欢迎五款蓝牙耳机测评