微信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;
}
}
相关文章
Swagger-boostrap-ui如何配置用户名密码访问
这篇文章主要介绍了Swagger-boostrap-ui如何配置用户名密码访问,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-05-05mybatis中点击mapper接口快速定位到对应xml中sql方式
这篇文章主要介绍了mybatis中点击mapper接口快速定位到对应xml中sql方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01自动配置@EnableAutoConfiguration问题
这篇文章主要介绍了自动配置@EnableAutoConfiguration问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-06-06
最新评论