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微信主动推送消息怎么实现?相关推荐

  1. java中线程的生命周期_Java中的线程生命周期– Java中的线程状态

    java中线程的生命周期 Understanding Thread Life Cycle in Java and Thread States are very important when you a ...

  2. java不看答案不会_Java新手必备:20道java基础面试题,不看答案你会几道题?

    1.面向对象的特征有哪些方面? [基础] 答:面向对象的特征主要有以下几个方面: 抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题, ...

  3. java 判断请求为 ajax请求_Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求...

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 >>>>>> ...

  4. java反射机制深入详解_Java基础与提高干货系列——Java反射机制

    前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来.那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现. 正文 Java反射机制定义 Java反射机制 ...

  5. java中的泛型是什么_Java中泛型是什么?Java泛型的详细介绍

    本篇文章给大家带来的内容是关于Java中泛型是什么?Java泛型的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.什么是泛型? Java泛型设计原则:只要在编译时期没有出 ...

  6. java架构师主要负责什么_Java架构师主要学什么 Java架构师工资多少

    Java架构师主要学什么 Java架构师工资多少 Java架构师是当下一个热门的职业,这已成不争的事实.学习Java架构技术成目前较为流行的一种趋势,作为Java架构师主要学什么呢?Java架构师工资 ...

  7. Java面向对象程序设计实训教程_JAVA课程实验报告 实验二 JAVA面向对象程序设计...

    课程:Java程序设计  班级:1352  姓名:黄伟业  学号:20135315 成绩:             指导教师:娄嘉鹏    实验日期:2015.5.7 实验密级:         预习 ...

  8. Java写一个excel工具类_Java中Excel写操作工具类--Java免费学习网

    核心提示:package com.common.excel;import com.common.excel.exception.WriteExcelException;import jxl.Workb ...

  9. Java面试题记不了怎么办_java面试题怎么记?java面试要注意什么?

    学习完java之后,大家肯定是要出去找java相关的工作的,并且找工作都要面试,为了能够在面试中显示出自己的能力,很多小伙伴都想知道java面试题怎么记?那么接下来,我们就来给大家讲解一下这方面的内容 ...

  10. java将数组逆序输出_java将一个数组逆序输出-java将一个数组逆序输出的方法-吾爱编程网...

    今天吾爱编程为大家介绍一下java的经典实例将一个数组逆序输出,相信很多学习java的小伙伴都会接触到,有需要的小伙伴可以参考一下: 1.需求分析: 用第一个与最后一个交换, 第二个与倒数第二个交换, ...

最新文章

  1. Thinkphp框架中D()和M()的区别
  2. 迅为linux下串口,迅为IMX6ULL开发板Linux RS232/485驱动实验(上)
  3. python3的3D实战-基于panda3d(2)
  4. HH SaaS电商系统的商品营销标签功能模块设计
  5. 使用Javascript正则表达式来格式化XML内容
  6. PowerVR 6XT/6XE系列移动GPU
  7. 索尼XA3曝光:同样是21:9屏幕 带鱼手机屏或成新潮流
  8. 50 行代码教你爬取猫眼电影 TOP100 榜所有信息
  9. php中对象(object)与数组(array)之间的相互转换
  10. C# ComboBox 文本居中设置
  11. oracle 游离块修复,求助讨论---上颌单侧后牙游离缺失的修复
  12. linux 深信服ssl_mac访问不了深信服的ssl vpn
  13. java unbox_java base-05-Box UnBox 自动装拆箱
  14. 【C++】继承详解,菱形继承问题
  15. 自从加入酒水捡漏群,京东自营酒水2折捡漏,我一下子屯了6个酒柜...
  16. JavaBean对象与jfinal的Record对象互转
  17. 短信API随机验证码加60秒后重新发送短息验证码
  18. 对自动变速器的控制器建模
  19. App安全架构之前端安全防护
  20. 【P4149 [IOI2011]Race】点分治

热门文章

  1. win10 修改git账号密码
  2. 110道 Redis面试题及答案 (持续更新)
  3. 玩转流量,天下无锅——IT运维人员的九阳神功(上)
  4. python pdfminer3k_Python对pdf中的关键字过滤(pdfminer3k或pdfminer使用)
  5. U盘提示''这张磁盘有写保护''修复工具
  6. vue 如何打开接口返回的HTML文件
  7. 三维匹配_多视图几何三维重建实战系列之COLMAP
  8. 马尔可夫(Markov)不等式
  9. LR破解版录制手机脚本
  10. warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]