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

  • 相关阅读:
    ADB高级应用
    struts2 结合extjs实现的一个登录实例
    css3中关于伪类的使用
    漫谈并发编程(三):共享受限资源
    awk依照多个分隔符进行切割
    3星|《财经天下周刊》2017年21期:海外购几乎是亚马逊中国的最后一根救命稻草
    3星|《迷失的盛宴:中国保险产业1978-2014》:序言比正文精彩
    3星|《超级运营术》:互联网社区运营老手经验谈
    3星|《百年流水线》:流水线与工业、社会、艺术的交互史
    5星|戴蒙德《为什么有的国家富裕,有的国家贫穷》:为什么有的国家能发展出好制度
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/5165270.html
Copyright © 2020-2023  润新知