java 微信主动推送消息_java微信主动推送消息,java微信主动推送消息怎么实现?
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微信主动推送消息,java微信主动推送消息怎么实现?相关推荐
- java中线程的生命周期_Java中的线程生命周期– Java中的线程状态
java中线程的生命周期 Understanding Thread Life Cycle in Java and Thread States are very important when you a ...
- java不看答案不会_Java新手必备:20道java基础面试题,不看答案你会几道题?
1.面向对象的特征有哪些方面? [基础] 答:面向对象的特征主要有以下几个方面: 抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题, ...
- java 判断请求为 ajax请求_Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求...
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 >>>>>> ...
- java反射机制深入详解_Java基础与提高干货系列——Java反射机制
前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来.那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现. 正文 Java反射机制定义 Java反射机制 ...
- java中的泛型是什么_Java中泛型是什么?Java泛型的详细介绍
本篇文章给大家带来的内容是关于Java中泛型是什么?Java泛型的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.什么是泛型? Java泛型设计原则:只要在编译时期没有出 ...
- java架构师主要负责什么_Java架构师主要学什么 Java架构师工资多少
Java架构师主要学什么 Java架构师工资多少 Java架构师是当下一个热门的职业,这已成不争的事实.学习Java架构技术成目前较为流行的一种趋势,作为Java架构师主要学什么呢?Java架构师工资 ...
- Java面向对象程序设计实训教程_JAVA课程实验报告 实验二 JAVA面向对象程序设计...
课程:Java程序设计 班级:1352 姓名:黄伟业 学号:20135315 成绩: 指导教师:娄嘉鹏 实验日期:2015.5.7 实验密级: 预习 ...
- Java写一个excel工具类_Java中Excel写操作工具类--Java免费学习网
核心提示:package com.common.excel;import com.common.excel.exception.WriteExcelException;import jxl.Workb ...
- Java面试题记不了怎么办_java面试题怎么记?java面试要注意什么?
学习完java之后,大家肯定是要出去找java相关的工作的,并且找工作都要面试,为了能够在面试中显示出自己的能力,很多小伙伴都想知道java面试题怎么记?那么接下来,我们就来给大家讲解一下这方面的内容 ...
- java将数组逆序输出_java将一个数组逆序输出-java将一个数组逆序输出的方法-吾爱编程网...
今天吾爱编程为大家介绍一下java的经典实例将一个数组逆序输出,相信很多学习java的小伙伴都会接触到,有需要的小伙伴可以参考一下: 1.需求分析: 用第一个与最后一个交换, 第二个与倒数第二个交换, ...
最新文章
- Thinkphp框架中D()和M()的区别
- 迅为linux下串口,迅为IMX6ULL开发板Linux RS232/485驱动实验(上)
- python3的3D实战-基于panda3d(2)
- HH SaaS电商系统的商品营销标签功能模块设计
- 使用Javascript正则表达式来格式化XML内容
- PowerVR 6XT/6XE系列移动GPU
- 索尼XA3曝光:同样是21:9屏幕 带鱼手机屏或成新潮流
- 50 行代码教你爬取猫眼电影 TOP100 榜所有信息
- php中对象(object)与数组(array)之间的相互转换
- C# ComboBox 文本居中设置
- oracle 游离块修复,求助讨论---上颌单侧后牙游离缺失的修复
- linux 深信服ssl_mac访问不了深信服的ssl vpn
- java unbox_java base-05-Box UnBox 自动装拆箱
- 【C++】继承详解,菱形继承问题
- 自从加入酒水捡漏群,京东自营酒水2折捡漏,我一下子屯了6个酒柜...
- JavaBean对象与jfinal的Record对象互转
- 短信API随机验证码加60秒后重新发送短息验证码
- 对自动变速器的控制器建模
- App安全架构之前端安全防护
- 【P4149 [IOI2011]Race】点分治
热门文章
- win10 修改git账号密码
- 110道 Redis面试题及答案 (持续更新)
- 玩转流量,天下无锅——IT运维人员的九阳神功(上)
- python pdfminer3k_Python对pdf中的关键字过滤(pdfminer3k或pdfminer使用)
- U盘提示''这张磁盘有写保护''修复工具
- vue 如何打开接口返回的HTML文件
- 三维匹配_多视图几何三维重建实战系列之COLMAP
- 马尔可夫(Markov)不等式
- LR破解版录制手机脚本
- warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]