Java实现微信公众号模板消息推送给用户
- 创建消息模板实体对象
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;}
}
消息模板
- 先获取用于发送消息模板的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();}}
- 发送模板消息方法(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;}
- 创建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;}
}
- 设置定时任务,生成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实现微信公众号模板消息推送给用户相关推荐
- Java对接微信公众号模板消息推送(架包WxJava)
内容有点多,请耐心! 最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offi ...
- Java对接微信公众号模板消息推送
最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offiaccount/Get ...
- Nodejs + express 开发微信公众号模板消息推送功能
第一步:申请测试号 1.打开微信测试号申请平台 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.点击"登录&q ...
- 微信公众号模板消息推送(PHP)
1.发送模板消息 public function send_notice(){$access_token = '';//模板消息$json_template = $this->json_temp ...
- 【Java中实现微信公众号模板消息推送】
主要流程: 1.在微信公众测试平台上注册账号,关注测试公众号,新增消息模板 2.拿到需要的参数openId appId appsecret 模板Id后进行开发 微信公众平台测试号管理地址 https: ...
- 微信公众号模板消息推送(附上完整代码)
官方文档 会用到的调用函数 import logging import requests import time from pickle import dumps, loadsfrom request ...
- 微信公众号模板消息推送问题汇总
总结:经常遇到的微信模版消息推送返回失败情况! 1.{"errcode":40037,"errmsg":"invalid template_id hi ...
- 公众平台模板消息所在行业_微信公众号模板消息功能怎么快速推送?
公众号平台上模板消息功能仅支持添加模板和更改所在行业,不支持模板消息推送,如果想要实现更多功能效果,可以使用微号帮平台的模板消息群发功能实现,也可以通过公众号平台的接口自己开发实现功能,均可以达到微信 ...
- java程序集成微信公众号模板消息功能
要在 Java 程序中集成微信公众号模板消息功能,您需要按照以下步骤进行: 在微信公众平台上申请并获取您的公众号的 appid 和 appsecret. 使用 appid 和 appsecret 调用 ...
最新文章
- LeetCode Reverse String(字符串反转)
- Scala _02基础
- python 测试mysql数据库_Python操作MySQL数据库----继续安装和测试
- 初读CLR Via C# 之 IL、CTS、CLS
- iOS学习之UItableView
- c语言变量强制转换,C语言——“=”中的强制类型转换
- abap 帮助文档 中文_谷歌的软件工程 读书笔记(十)文档
- java对象的内存结构_Java对象在内存中的结构分析
- 同步,异步,阻塞,非阻塞?
- huffman编码的程序流程图_基于哈夫曼编码的压缩解压程序(C 语言)
- 短期出差北京个人所见所闻所感
- [CVPR2021]NeRV: Neural Reflectance and Visibility Fields for Relighting and View Synthesis
- 高德地图自定义贴图图层
- ACM2021辽宁省赛:CDEFGILM
- webpack--黑洞级入门
- MySQL数据查询之多表查询
- 乱拔插U盘,导致U盘变成RAW未初始化格式,容量大小为0。
- 零基础学java——面向对象(三)
- DHTML---HTML5
- 电磁兼容试验项目之谐波电流试验