java微信主动推送消息_利用java开发微信实现微信主动推送消息实例
这篇文章主要介绍了利用java开发微信实现微信主动推送消息实例,需要的朋友可以参考下
1.拉取access_token
2.拉取用户信息
3.主动推送消息
4.接口貌似要申请权限
5.依赖httpclient4.2.3 和jackson 2.2.1
代码如下:public class WeixinAPIHelper {
/**
* 获取token接口
*/
private String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";
/**
* 拉微信用户信息接口
*/
private String getUserInfoUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}";
/**
* 主动推送信息接口
*/
private String sendMsgUrl = "https://api.weixin.qq.com/cgi-bin/message/send?access_token={0}";
private HttpClient webClient;
private Log log = LogFactory.getLog(getClass());
public void initWebClient(String proxyHost, int proxyPort){
this.initWebClient();
if(webClient != null && !StringUtils.isEmpty(proxyHost)){
HttpHost proxy = new HttpHost(proxyHost, proxyPort);
webClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
}
/**
* @desc 初始化创建 WebClient
*/
public void initWebClient() {
log.info("initWebClient start....");
try {
PoolingClientConnectionManager tcm = new PoolingClientConnectionManager();
tcm.setMaxTotal(10);
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
ctx.init(null, new X509TrustManager[] { tm }, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Scheme sch = new Scheme("https", 443, ssf);
tcm.getSchemeRegistry().register(sch);
webClient = new DefaultHttpClient(tcm);
} catch (Exception ex) {
log.error("initWebClient exception", ex);
} finally {
log.info("initWebClient end....");
}
}
/**
* @desc 获取授权token
* @param appid
* @param secret
* @return
*/
public String getAccessToken(String appid, String secret) {
String accessToken = null;
try {
log.info("getAccessToken start.{appid=" + appid + ",secret:" + secret + "}");
String url = MessageFormat.format(this.getTokenUrl, appid, secret);
String response = executeHttpGet(url);
accessToken = JsonUtils.read(response, "access_token");
} catch (Exception e) {
log.error("get access toekn exception", e);
}
return accessToken;
}
/**
* @desc 推送信息
* @param token
* @param msg
* @return
*/
public String sendMessage(String token,String msg){
try{
log.info("sendMessage start.token:"+token+",msg:"+msg);
String url = MessageFormat.format(this.sendMsgUrl, token);
HttpPost post = new HttpPost(url);
ResponseHandler> responseHandler = new BasicResponseHandler();
StringEntity entity = new StringEntity(msg);
post.setEntity(entity);
String response = (String) this.webClient.execute(post, responseHandler);
log.info("return response=====start======");
log.info(response);
log.info("return response=====end======");
return response;
}catch (Exception e) {
log.error("get user info exception", e);
return null;
}
}
/**
* @desc 拉取用户信息
* @param token
* @param openid
* @return
*/
public WeixinOpenUser getUserInfo(String token, String openid) {
try {
log.info("getUserInfo start.{token:" + token + ",openid:" + openid + "}");
String url = MessageFormat.format(this.getUserInfoUrl, token, openid);
String response = executeHttpGet(url);
JsonNode json = JsonUtils.read(response);
if (json.get("openid") != null) {
WeixinOpenUser user = new WeixinOpenUser();
user.setOpenUserId(json.get("openid").asText());
user.setState(json.get("subscribe").asText());
if ("1".equals(user.getState())) {
user.setUserName(json.get("nickname").asText());
user.setSex(json.get("sex").asText());
user.setCity(json.get("city").asText());
user.setLanguage(json.get("language").asText());
}
return user;
}
} catch (Exception e) {
log.error("get user info exception", e);
}
return null;
}
/**
* @desc 发起HTTP GET请求返回数据
* @param url
* @return
* @throws IOException
* @throws ClientProtocolException
*/
private String executeHttpGet(String url) throws IOException, ClientProtocolException {
ResponseHandler> responseHandler = new BasicResponseHandler();
String response = (String) this.webClient.execute(new HttpGet(url), responseHandler);
log.info("return response=====start======");
log.info(response);
log.info("return response=====end======");
return response;
}
}
java微信主动推送消息_利用java开发微信实现微信主动推送消息实例相关推荐
- java 根据ip获取mac地址_利用java如何根据IP获取mac地址
利用java如何根据IP获取mac地址 发布时间:2020-11-25 15:49:42 来源:亿速云 阅读:74 作者:Leah 利用java如何根据IP获取mac地址?针对这个问题,这篇文章详细介 ...
- java 两日期的周数_利用 Java 中 Calendar 计算两个日期之间的天数和周数
利用 Java 中 Calendar 计算两个日期之间的天数和周数 前言 究竟什么是一个 Calendar 呢? 中文的翻译就是日历, 那我们立刻可以想到我们生活中有阳 (公) 历阴 (农) 历之分它 ...
- java filter 返回错误消息_利用java filter 实现业务异常拦截 跳转到错误信息提示页面...
1.缘由:我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理机制,我们在业务层会跑出我们遇到业务 ...
- java 读取excel 合并单元格_利用java读写Excel文件、合并单元格
一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚 java 代码publicstaticvoidsetHeader(WritableSheet dataSheet,Str ...
- java读二进制bin文件内容_利用Java读取二进制文件示例详细解说
前言 此文主要给大伙介绍了关于Java读取二进制文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 读Hex写CSV data目录下有little-endian bin文 ...
- python微信朋友圈分享功能_利用Python让你的微信朋友圈与众不同,更加高大上
前言 对于发朋友圈,我想很多人都有一种"执念",那就是一定要集齐九张图,没有九张图的朋友圈是没有灵魂的!!! 为了集齐九张图也是煞费苦心,我会告诉你,用Python轻松制作九张图嘛 ...
- java群发图文消息_使用Java语言开发微信公众平台(四)——图文消息的发送与响应...
在上一篇文章中,我们实现了被关注回复与关键词回复功能.在用户关注的时候自动推送功能菜单,并根据用户输入的关键词,回复特定信息.但是,我们只能回复文本消息给用户,如何才回复一条图文消息呢?本周,我们一起 ...
- java微信接收消息_使用Java开发微信公众平台(二)——消息的接收与响应
上一篇文章中,我们学习了使用Java语言开发微信公众平台的第一部分--环境搭建与开发接入.那么,本篇文章,我们将在此基础上,学习[消息的接收与响应].喜欢本文,请点击下方喜欢按钮呗!❤️ 当然,我们在 ...
- activemq后台管理 看topic消息_「Java」 - SpringBoot amp; ActiveMQ
一.消息队列 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合.异步消息.流量削锋等问题,实现高性能.高可用.可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件. 目前在生产环境中使用较 ...
- java post 注册_利用JAVA发送POST请求(垃圾注册就是这么产生的) | 学步园
大伙都知道利用JAVA的net包的URL类和 URLConnection可以得到网页源代码(这个应该是蜘蛛程序的锥形吧),但是向网页发送数据怎么办呢,GET请求很好处理,直接在网址后面加参数就可以了, ...
最新文章
- php中表头不跟着滑动,JS实现table表格固定表头且表头随横向滚动而滚动
- Django模板继承后出现logo图片无法加载的问题
- 动态规划之-最大子段和
- es6 next()、throw()、return() 的共同点
- java重排序_Java synchronized 能防止指令重排序吗?
- java同步器有哪些_Java 队列同步器 AQS
- 移动APP测试用例设计的关注点
- 大数据课程30天掌握 spark内存计算(python )-徐培成-专题视频课程
- linux下远程桌面连接工具,linux远程连接windows工具(tsclient 远程桌面)
- 两步搞定经验模态分解与离散小波变换
- PPT——背景图格式(排版)和字体排版
- 修改(移交)微信支付商户平台超级管理员账号流程
- Vue运行环境及淘宝镜像(cnpm命令)安装
- 关于如何使用java,将Office文件转换成PDF格式
- 公有云、私有云、混合云
- 不可或缺那就现在安排,22款奔驰GLE350升级ACC自适应巡航系统
- python头像教程_微信好友头像全家福详细教程python版
- 树莓派安装Ubuntu20.04
- iNFTnews | iPhone14已来,苹果的元宇宙还有多远?
- 拨号宽带服务器无响应是什么意思,宽带拨号服务器无响应
热门文章
- 第九届蓝桥杯 明码(三种方法)
- KDJ指标公式的应用要则是什么KDJ指标公式的使用技巧是什么
- 计算机无法设置ip地址,如何解决Windows8无法设置静态IP地址的问题
- Photoshop CS4 使用通道精确抠图
- 如何利用ikuai将闲置电脑配作软路由器?
- 机械革命计算机配置,机械革命笔记本Bios设置方法
- Bootstrap:文字排版与图片样式
- plsql去除字段中空格_PLSQL 数据中去掉 字段有空格 回车 换行
- [机缘参悟-12]:“易经“、“儒“、“释“、“道“、“法”、“墨”、“兵”的基本原理与核心思想
- java quartz 每月1号执行_Quartz 每月1号 执行规则表达式