微信公众平台标签开发之获取标签下粉丝列表(5)

2017年09月24日 08:34 | 2582次浏览 作者原创 版权保护

前面几个章节介绍了微信创建标签,获取已创建标签,编辑标签,删除标签功能,本章节主要介绍

微信用户标签下的粉丝列表

一、获取标签下粉丝列表

接口调用请求说明

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


小说《我是全球混乱的源头》
此文章本站原创,地址 https://www.vxzsk.com/210.html   转载请注明出处!谢谢!

感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程