微信java開發之實現微信主動推送消息

1.拉取access_token
2.拉取用戶信息
3.主動推送消息
4.接口貌似要申請權限
5.依賴httpclient4.2.3 和jackson 2.2.1web


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}";json

 

 private HttpClient webClient;api

 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() {app

    public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {post

    }this

    public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {url

    }orm

    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....");
  }
 }token

 /**  * @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; }}

相關文章
相關標籤/搜索