前面几个章节介绍了微信创建标签,获取已创建标签,编辑标签,删除标签功能,本章节主要介绍
微信用户标签下的粉丝列表。
一、获取标签下粉丝列表
接口调用请求说明
http请求方式:GET(请使用https协议) https://api.weixin.qq.com/cgi-bin/user/tag/get?access_token=ACCESS_TOKEN POST数据格式:JSON POST数据例子: { "tagid" : 134, "next_openid":""//第一个拉取的OPENID,不填默认从头开始拉取 }
上述是微信官方文档的说明,其实这里有个错误,微信给的一个坑,此坑就是http请求方式:GET(请使用https协议),经测试,其实请求方式为 POST 请求。
返回说明(正常时返回的json包示例)
{ "count":2,//这次获取的粉丝数量 "data":{//粉丝列表 "openid":[ "ocYxcuAEy30bX0NXmGn4ypqx3tI0", "ocYxcuBt0mRugKZ7tGAHPnUaOW7Y" ] }, "next_openid":"ocYxcuBt0mRugKZ7tGAHPnUaOW7Y"//拉取列表最后一个用户的openid }
错误码说明
错误码 说明
-1 系统繁忙
40003 传入非法的openid
45159 非法的tag_id
至此, 接口调用说明已经介绍完毕,接下来我们介绍通过java代码实现微信获取标签粉丝列表
二、Java代码实现微信获取标签粉丝列表
1,获取access_token
*** * 获取token V型知识库 www.vxzsk.com * @param appid 应用id * @param appSecret 应用秘钥 * @return */ public static String getToken(String appid,String appSecret){ String url ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appSecret+""; String backData=TestMenu.sendGet(url, "utf-8", 10000); JSONObject jsonObject = JSONObject.fromObject(backData); String access_token=jsonObject.getString("access_token");//调用接口凭证 return access_token; }
appid,appSecret分别为应用id和应用秘钥,读者可登陆微信公众平台管理中心查阅。
sendGet方法
/*** * 模拟get请求 * @param url * @param charset * @param timeout * @return */ public static String sendGet(String url, String charset, int timeout) { String result = ""; try { URL u = new URL(url); try { URLConnection conn = u.openConnection(); conn.connect(); conn.setConnectTimeout(timeout); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset)); String line=""; while ((line = in.readLine()) != null) { result = result + line; } in.close(); } catch (IOException e) { return result; } } catch (MalformedURLException e) { return result; } return result; }
2,实现微信标签获取粉丝列表
/**** * 获取标签下的粉丝列表(用户列表) * @param access_token * @return */ public static String getTagUsers(String access_token,String params){ String url ="https://api.weixin.qq.com/cgi-bin/user/tag/get?access_token=";//获取标签接口 String jsonData = TestMenu.sendPost(url+access_token, params); System.out.println("请求接口返回"+jsonData); return jsonData; }
注意,代码中是Post请求,而不是微信官方文档说的Get请求。
第一个参数access_token就是我们第一步获取得到的,此参数是调用微信接口凭证,有效期为7200秒,过期要重新获取。
第二个参数params为请求微信标签获取粉丝列表接口的参数,参数格式如下
//3,获取标签下的粉丝用户列表 String params="{" +"\"tagid\" : 2," +"\"next_openid\":\"\""//第一个拉取的OPENID,不填默认从头开始拉取 +"}";
tagid为标签的id号,我们在第二章节已经介绍如何获取微信已创建的标签,不明白的可前往阅读学习。
如上图所示,案例中的tagid为2,就是图中红色箭头"星标用户"的id号,目前在此标签下只有一个粉丝。
3,java代码main方法调用实现
public static void main(String[] args) { String appId = AppConst.APP_ID;//应用id String appSecret = AppConst.APPSECRET;//应用秘钥 //1,获取access_token String access_token = TestMenu.getToken(appId, appSecret); System.out.println("token值:"+access_token); //2,获取标签下的粉丝用户列表 String params="{" +"\"tagid\" : 2," +"\"next_openid\":\"\""//第一个拉取的OPENID,不填默认从头开始拉取 +"}"; String tagUsers = TestMenu.getTagUsers(access_token,params); System.out.println(tagUsers);
应用id和应用秘钥替换为自己的即可。
sendPost方法
/*** * Post 请求* */ public static String sendPost(String requrl,String param){ URL url; String sTotalString=""; try { url = new URL(requrl); URLConnection connection = url.openConnection(); connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("Content-Type", "text/xml"); // connection.setRequestProperty("Content-Length", body.getBytes().length+""); connection.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"); connection.setDoOutput(true); OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "utf-8"); out.write(param); // 向页面传递数据。post的关键所在! out.flush(); out.close(); // 一旦发送成功,用以下方法就可以得到服务器的回应: String sCurrentLine; sCurrentLine = ""; sTotalString = ""; InputStream l_urlStream; l_urlStream = connection.getInputStream(); // 传说中的三层包装阿! BufferedReader l_reader = new BufferedReader(new InputStreamReader( l_urlStream)); while ((sCurrentLine = l_reader.readLine()) != null) { sTotalString += sCurrentLine + "\r\n"; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(sTotalString); return sTotalString; }
执行main方法效果如下图
如图所示,我们在星标用户标签下已经获取了仅仅只有一个粉丝的openid
感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程