这篇文章主要介绍了利用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开发微信实现微信主动推送消息实例相关推荐

  1. java 根据ip获取mac地址_利用java如何根据IP获取mac地址

    利用java如何根据IP获取mac地址 发布时间:2020-11-25 15:49:42 来源:亿速云 阅读:74 作者:Leah 利用java如何根据IP获取mac地址?针对这个问题,这篇文章详细介 ...

  2. java 两日期的周数_利用 Java 中 Calendar 计算两个日期之间的天数和周数

    利用 Java 中 Calendar 计算两个日期之间的天数和周数 前言 究竟什么是一个 Calendar 呢? 中文的翻译就是日历, 那我们立刻可以想到我们生活中有阳 (公) 历阴 (农) 历之分它 ...

  3. java filter 返回错误消息_利用java filter 实现业务异常拦截 跳转到错误信息提示页面...

    1.缘由:我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理机制,我们在业务层会跑出我们遇到业务 ...

  4. java 读取excel 合并单元格_利用java读写Excel文件、合并单元格

    一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚 java 代码publicstaticvoidsetHeader(WritableSheet dataSheet,Str ...

  5. java读二进制bin文件内容_利用Java读取二进制文件示例详细解说

    前言 此文主要给大伙介绍了关于Java读取二进制文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 读Hex写CSV data目录下有little-endian bin文 ...

  6. python微信朋友圈分享功能_利用Python让你的微信朋友圈与众不同,更加高大上

    前言 对于发朋友圈,我想很多人都有一种"执念",那就是一定要集齐九张图,没有九张图的朋友圈是没有灵魂的!!! 为了集齐九张图也是煞费苦心,我会告诉你,用Python轻松制作九张图嘛 ...

  7. java群发图文消息_使用Java语言开发微信公众平台(四)——图文消息的发送与响应...

    在上一篇文章中,我们实现了被关注回复与关键词回复功能.在用户关注的时候自动推送功能菜单,并根据用户输入的关键词,回复特定信息.但是,我们只能回复文本消息给用户,如何才回复一条图文消息呢?本周,我们一起 ...

  8. java微信接收消息_使用Java开发微信公众平台(二)——消息的接收与响应

    上一篇文章中,我们学习了使用Java语言开发微信公众平台的第一部分--环境搭建与开发接入.那么,本篇文章,我们将在此基础上,学习[消息的接收与响应].喜欢本文,请点击下方喜欢按钮呗!❤️ 当然,我们在 ...

  9. activemq后台管理 看topic消息_「Java」 - SpringBoot amp; ActiveMQ

    一.消息队列 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合.异步消息.流量削锋等问题,实现高性能.高可用.可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件. 目前在生产环境中使用较 ...

  10. java post 注册_利用JAVA发送POST请求(垃圾注册就是这么产生的) | 学步园

    大伙都知道利用JAVA的net包的URL类和 URLConnection可以得到网页源代码(这个应该是蜘蛛程序的锥形吧),但是向网页发送数据怎么办呢,GET请求很好处理,直接在网址后面加参数就可以了, ...

最新文章

  1. php中表头不跟着滑动,JS实现table表格固定表头且表头随横向滚动而滚动
  2. Django模板继承后出现logo图片无法加载的问题
  3. 动态规划之-最大子段和
  4. es6 next()、throw()、return() 的共同点
  5. java重排序_Java synchronized 能防止指令重排序吗?
  6. java同步器有哪些_Java 队列同步器 AQS
  7. 移动APP测试用例设计的关注点
  8. 大数据课程30天掌握 spark内存计算(python )-徐培成-专题视频课程
  9. linux下远程桌面连接工具,linux远程连接windows工具(tsclient 远程桌面)
  10. 两步搞定经验模态分解与离散小波变换
  11. PPT——背景图格式(排版)和字体排版
  12. 修改(移交)微信支付商户平台超级管理员账号流程
  13. Vue运行环境及淘宝镜像(cnpm命令)安装
  14. 关于如何使用java,将Office文件转换成PDF格式
  15. 公有云、私有云、混合云
  16. 不可或缺那就现在安排,22款奔驰GLE350升级ACC自适应巡航系统
  17. python头像教程_微信好友头像全家福详细教程python版
  18. 树莓派安装Ubuntu20.04
  19. iNFTnews | iPhone14已来,苹果的元宇宙还有多远?
  20. 拨号宽带服务器无响应是什么意思,宽带拨号服务器无响应

热门文章

  1. 第九届蓝桥杯 明码(三种方法)
  2. KDJ指标公式的应用要则是什么KDJ指标公式的使用技巧是什么
  3. 计算机无法设置ip地址,如何解决Windows8无法设置静态IP地址的问题
  4. Photoshop CS4 使用通道精确抠图
  5. 如何利用ikuai将闲置电脑配作软路由器?
  6. 机械革命计算机配置,机械革命笔记本Bios设置方法
  7. Bootstrap:文字排版与图片样式
  8. plsql去除字段中空格_PLSQL 数据中去掉 字段有空格 回车 换行
  9. [机缘参悟-12]:“易经“、“儒“、“释“、“道“、“法”、“墨”、“兵”的基本原理与核心思想
  10. java quartz 每月1号执行_Quartz 每月1号 执行规则表达式