java微信获取所有用户_JAVA微信公众号网页开发——获取公众号关注的所有用户(微信公众号粉丝)...

package com.weixin.sendmessage;

import org.apache.commons.lang.StringUtils;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.StatusLine;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.HttpResponseException;

import org.apache.http.client.ResponseHandler;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.conn.ssl.SSLConnectionSocketFactory;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClientBuilder;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.util.EntityUtils;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import org.springframework.web.bind.annotation.RequestMapping;

import javax.net.ssl.SSLContext;

import javax.net.ssl.TrustManager;

import javax.net.ssl.X509TrustManager;

import java.io.IOException;

import java.net.URI;

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

import java.util.HashSet;

import java.util.Set;

//控制器

public class GetOpenIdAct {

/**

* 获取关注用户的所有openid

* @return

*/

@RequestMapping("/get_weixin_user.do")

public String getWeixinUser(){

String access_token=getToken();

Set openIds=getUsers(access_token);

//openIds为所有关注用户的openid

return null;

}

/**

* 获取微信公众号关注用户

* 官方接口文档:https://developers.weixin.qq.com/doc/offiaccount/User_Management/Getting_a_User_List.html

* @param access_token

* @return

*/

public Set getUsers(String access_token) {

String usersGetUrl="https://api.weixin.qq.com/cgi-bin/user/get";

usersGetUrl+="?access_token="+access_token;

JSONObject data=getUrlResponse(usersGetUrl);

SetopenIds=new HashSet();

Integer total=0,count=0;

try {

total=(Integer) data.get("total");

count=(Integer) data.get("count");

//总关注用户数超过默认一万

if(count

openIds.addAll(getUsers(openIds,usersGetUrl, access_token, (String)data.get("next_openid")));

}else{

//有关注者 json才有data参数

if(count>0){

JSONObject openIdData=(JSONObject) data.get("data");

JSONArray openIdArray= (JSONArray) openIdData.get("openid");

for(int i=0;i

openIds.add((String) openIdArray.get(i));

}

}

}

} catch (JSONException e) {

e.printStackTrace();

}

return openIds;

}

/**

* 获取access_token

*

* @return

*/

public String getToken() {

String tokenGetUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";//微信提供获取access_token接口地址

String appid = "";

String secret = "";

System.out.println("~~~~~appid:" + appid);

System.out.println("~~~~~secret:" + secret);

JSONObject tokenJson = new JSONObject();

if (StringUtils.isNotBlank(appid) && StringUtils.isNotBlank(secret)) {

tokenGetUrl += "&appid=" + appid + "&secret=" + secret;

tokenJson = getUrlResponse(tokenGetUrl);

System.out.println("~~~~~tokenJson:" + tokenJson.toString());

try {

return (String) tokenJson.get("access_token");

} catch (JSONException e) {

System.out.println("报错了");

return null;

}

} else {

System.out.println("appid和secret为空");

return null;

}

}

private Set getUsers(SetopenIds,String url,String access_token,String next_openid) {

JSONObject data=getUrlResponse(url);

try {

Integer count=(Integer) data.get("count");

String nextOpenId=(String) data.get("next_openid");

if(count>0){

JSONObject openIdData=(JSONObject) data.get("data");

JSONArray openIdArray= (JSONArray) openIdData.get("openid");

for(int i=0;i

openIds.add((String) openIdArray.get(i));

}

}

if(StringUtils.isNotBlank(nextOpenId)){

return getUsers(openIds,url, access_token, nextOpenId);

}

} catch (JSONException e) {

e.printStackTrace();

}

return openIds;

}

private JSONObject getUrlResponse(String url) {

CharsetHandler handler = new CharsetHandler("UTF-8");

try {

HttpGet httpget = new HttpGet(new URI(url));

HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

//HttpClient

CloseableHttpClient client = httpClientBuilder.build();

client = (CloseableHttpClient) wrapClient(client);

return new JSONObject(client.execute(httpget, handler));

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

private static HttpClient wrapClient(HttpClient base) {

try {

SSLContext ctx = SSLContext.getInstance("TLSv1");

X509TrustManager tm = new X509TrustManager() {

public void checkClientTrusted(X509Certificate[] xcs,

String string) throws CertificateException {

}

public void checkServerTrusted(X509Certificate[] xcs,

String string) throws CertificateException {

}

public X509Certificate[] getAcceptedIssuers() {

return null;

}

};

ctx.init(null, new TrustManager[]{tm}, null);

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(ctx, new String[]{"TLSv1"}, null,

SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);

CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();

return httpclient;

} catch (Exception ex) {

return null;

}

}

private class CharsetHandler implements ResponseHandler {

private String charset;

public CharsetHandler(String charset) {

this.charset = charset;

}

public String handleResponse(HttpResponse response)

throws ClientProtocolException, IOException {

StatusLine statusLine = response.getStatusLine();

if (statusLine.getStatusCode() >= 300) {

throw new HttpResponseException(statusLine.getStatusCode(),

statusLine.getReasonPhrase());

}

HttpEntity entity = response.getEntity();

if (entity != null) {

if (!StringUtils.isBlank(charset)) {

return EntityUtils.toString(entity, charset);

} else {

return EntityUtils.toString(entity);

}

} else {

return null;

}

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值