微信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;
 }
}

时间: 2024-09-14 04:18:03

微信java开发之实现微信主动推送消息_java的相关文章

微信公众号自定义菜单点击推送消息×

问题描述 微信公众号自定义菜单点击推送消息× 微信公众号完成了自定义菜单怎么点击菜单推送消息?微信公众号完成了自定义菜单怎么点击菜单推送消息? 解决方案 在公众号管理页面是可以为每个二级菜单设置链接的啊 解决方案二: 新建菜单的时候可以指定是链接还是推送哪些信息的. 解决方案三: 菜单是无法在代码里动态生成的,你需要先设置好 而且每次修改,客户端有24小时的缓存,除非重新关注

服务器如何主动推送消息到客户端

问题描述 C/S模式的客户端.目前碰到的问题时,当在某些特殊的触发条件下,服务器要向在线的客户端主动推送一些信息,客户端进行展示.客户端会安装在局域网内,无固定IP.客户端登录时提交登录信息,并使用HTTP协议每隔30s发送心跳包.那服务器该如何将信息推送到客户端呢? 解决方案 解决方案二:建立专用信道?(就像网游一样)似乎不太可取这样,发送心跳包的时候问问服务器有没有我的消息,如果有取一下.定时刷新我想要比一直开着socket要节约资源解决方案三:定时刷新取的服务器的资源解决方案四:只能客户端

微信主动推送图为信息给用户

问题描述 目前微信没有开放主动推送信息给用户的接口如果我们想实现只能通过爬虫来实现大概的原理就是通过模拟登录微信后台然后模拟发送大家有人开发过这种情况吗?可否提供代码参考一下最好是java实现的谢谢邮箱:2391733635@qq.com 解决方案 解决方案二:公众账号么?这个的花点钱获取那些高级接口得到用户信息吧!之前做了个通过抓包偷取用户列表的方法,不是很好用,每当微信更新数据就会有变化.

php微信公众号模拟登陆主动推消息还能用吗?是不是想主动推图文消息只有这条渠道?

问题描述 php微信公众号模拟登陆主动推消息还能用吗?是不是想主动推图文消息只有这条渠道? 想要主动推送图文消息是不是只能模拟登陆,模板接口好像没有图片,客服接口好像不能自动,模拟登陆拿到token之后的步骤从以往搜到的代码基本都不好使了,有没有大神指点一二 解决方案 http://blog.sina.com.cn/s/blog_6ab0cbbe0102v7fk.html

微信公众平台开发-微信开发者模式向用户推送消息,改的建立一个专门的后台让维护人员操作呢

问题描述 微信开发者模式向用户推送消息,改的建立一个专门的后台让维护人员操作呢 微信开发者模式向用户推送消息,改的建立一个专门的后台让维护人员操作呢 解决方案 自己看微信的sdk文档说明开发一套微信系统,或者用第三方的写好的cms,如微米的,http://bbs.weimicms.com/forum.php?mod=forumdisplay&fid=37

《微信公众平台开发最佳实践》——3.3 接收事件推送消息

3.3 接收事件推送消息 在基础接口中,事件消息只有关注和取消关注事件.用户关注和取消关注公众账号的时候将分别触发这两个消息. 3.3.1 关注/取消关注 用户关注微信公众账号时的界面如图3-14所示,单击"关注"按钮,微信公众账号将收到关注事件.用户关注微信公众账号时的XML数据格式如下所示: <xml> <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName> <FromUserN

微信放宽了服务号的每月推送数量限制

摘要: 近期,微信官方公布了一次重大的策略调整,放宽了服务号的每月推送数量限制,并且对于群发策略也有了很大程度的开放.先来看看官方说法: 1 .为了增强和提升微信公众帐号的服 近期,微信官方公布了一次重大的策略调整,放宽了服务号的每月推送数量限制,并且对于群发策略也有了很大程度的开放.先来看看官方说法: 1.为了增强和提升微信公众帐号的服务能力,所有服务号的群发次数由原来的每月1次改为每月(自然月)4次. 2.对已微信认证的服务号,开放公众平台高级群发接口,开发者可以通过高级群发接口实现更灵活的

验证token、回复图文\文本、推送消息的实用微信类php代码_php技巧

本文实例为大家分享了用于验证token,回复图文.文本,向用户推送消息等功能的微信类,具体代码如下 <?php class Wechat{ private $data = array(); public function __construct($token){ $this -> auth($token, $wxuser) || exit; if(IS_GET){ echo($_GET['echostr']); exit; }else{ $xml = file_get_contents(&qu

实时系统解决方案 TIBCO Rendezvous — 技术介绍(消息中间件|基于数据库的主动推送)

TIBCO Rendezvous - 技术介绍 1.1.1. TIBCO Rendezvous - 技术介绍 TIBCO Rendezvous(或称为TIBCO RV)产品是一种中间件,它具有发布/订阅(Publish/Subscribe).基于主题寻址(Subject-Based Addressing) 和自定义数据信息(Self-Describing Data Messages)等专利技术功能,使不同应用平台上的信息在一个共享的虚拟总线Information Bus(TIB)上进行传输交换.