有一项目,需要刷新最新的用户信息之后再给部分用户推送消息,之前选择微信的get接口,使用用户openid获取单个用户的信息,然后比对入库,一万个粉丝大概需要40多分钟
比较被动
然后使用批量获取,速度得到极大提升
批量获取用户基本信息
http请求方式: POST https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN
POST数据示例
这里吐槽一下,参数不是标准json,不是标准json,不是标准json,不是标准json,不是标准json,不是标准json,不是标准json,而是数组,返回值也不是表准json
这就要多些好几行代码来包装一下了
首先需要在数据库里拿出一部分用户,然后取openid
List<CustomerWechat> customerWechats = cwd.get100StartById(session, startId);
如果返回值不是空的话
就进行处理
JSONObject[] myList = new JSONObject[customerWechats.size()]; int i = 0; for (CustomerWechat cw : customerWechats) { JSONObject jb = new JSONObject(); jb.put("openid", customerWechats.get(i).getOpenid()); jb.put("lang", "zh_CN"); myList[i] = jb; i++; }
把数据再组合一下
JSONObject jsonObject = new JSONObject(); jsonObject.put("user_list", myList);
然后再从数据库里把接口地址拿出来
ApiWechat api = awd.getApiGetcustomerBatch(session);
然后把token加上
String url = api.getUrl().replace("ACCESS_TOKEN", at.getAccess_token());
然后
发器post等着返回数据就完事儿了
// 通过HttpPost来发送post请求 HttpPost httpPost = new HttpPost(url); String jsonString = jsonObject.toJSONString(); StringEntity entityStr = new StringEntity(jsonString, "UTF-8"); httpPost.setEntity(entityStr); CloseableHttpResponse response = null; CloseableHttpClient httpClient = HttpClients.createDefault(); response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); String resp = ""; resp = EntityUtils.toString(entity, "UTF-8"); EntityUtils.consume(entity);//释放资源
然后
把返回值没用的数据都删掉
里边的数据就不管了,都是大家最爱的json
String resArray = resp.substring(resp.indexOf("["), resp.length() - 1);
最后再把处理之后的数据,也就是表准的json了,转换为对象列表,就行了
List<CustomerWechat> customerList = JSONObject.parseArray(resArray, CustomerWechat.class);