公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成。一次拉取调用最多拉取10000个关注者的OpenID,可以通过多次拉取的方式来满足需求。
接口调用请求说明
http请求方式: GET(请使用https协议)

返回说明
正确时返回JSON数据包:

错误时返回JSON数据包(示例为无效AppID错误):
{"errcode":40013,"errmsg":"invalid appid"}
附:关注者数量超过10000时
当公众号关注者数量超过10000时,可通过填写next_openid的值,从而多次拉取列表的方式来满足需求。
具体而言,就是在调用接口时,将上一次调用得到的返回中的next_openid值,作为下一次调用中的next_openid值。
示例如下:
公众账号A拥有23000个关注的人,想通过拉取关注接口获取所有关注的人,那么分别请求url如下:
https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN
返回结果:
{ "total":23000, "count":10000, "data":{"openid":["OPENID1","OPENID2",...,"OPENID10000"] }, "next_openid":"OPENID10000"}https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID1
返回结果:
{ "total":23000, "count":10000, "data":{"openid":["OPENID10001","OPENID10002",...,"OPENID20000"] }, "next_openid":"OPENID20000"}https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID2
返回结果(关注者列表已返回完时,返回next_openid为空):
{"total":23000,"count":3000,"data":{""openid":[ "OPENID20001", "OPENID20002", ..., "OPENID23000"]},"next_openid":"OPENID23000"}微信官方网站后台的接口权限表里(以服务号为例)每天调用的获取用户列表能获取500次,获取用户基本信息可以获取500000次,所以说接下来,我在获取用户列表的时候,会用到缓存,别看500次不少了,
可是真正的用起来快得不得了,先上效果图如下:

先来看看用户列表,官网说获取用户的列表返回的是一组组openID,针对这个特性,我是这么做的,
创建一个用于存储openId的类
public class WxOpenIdInfo{public string WxopenId { get; set; }//用户存放微信用户的openId}然后再创建用户信息的基本类
/// <summary>/// 微信用户基本信息类/// </summary>public class WxUserInfo{public int subscribe { get; set; }//关注状态public string openid { get; set; }//OpenIDpublic string nickname { get; set; }//昵称public string sex { get; set; }//性别public string city { get; set; }//城市public string province { get; set; }//省份public string headimgurl { get; set; }//头像图片地址public string subscribe_time { get; set; }//关注时间public string remark { get; set; }//备注public string groupid { get; set; }//分组ID}用户列表前台代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WeiXinUserList.aspx.cs" Inherits="DQWebSite.Administrator.WeiXinUserList" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title><link href="css/style.css" rel="Stylesheet" type="text/css" /><style type="text/css">#title {width:100%; height:40px;margin-top:10px; text-indent:5px; line-height:40px;}.checkstyle { float:left;}#DDlAddgroups { text-align:center; width:161px; border:1px solid #d9d9d9; border-radius:5px; height:35px; line-height:35px; font-weight:bold; text-align:center; float:left; margin:auto 5px auto 5px;}.DDlAddgroups{ text-align:center; width:161px; border:1px solid #d9d9d9; border-radius:5px; height:35px; line-height:35px; font-weight:bold; text-align:center; float:left; margin:auto 5px auto 5px;}#DDLgroups { text-align:center; width:111px; border:1px solid #d9d9d9; border-radius:5px; height:35px; line-height:35px; font-weight:bold; text-align:center; float:left; margin:auto 5px auto 5px;}.newGroups { margin:auto 5px auto 5px;}.inputstyle { height:35px; line-height:35px; text-indent:5px; width:280px;background-image:url("images/inputbg.gif"); background-repeat:repeat-x;border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; float:left; margin:auto 5px auto 5px;}.wxusertab { border:1px solid #d9d9d9; width:100%; text-align:left; text-indent:5px;} th { height:35px;background-image:url("images/th.gif"); background-repeat:repeat-x;}td {border-bottom:1px solid #d9d9d9;}.trcolor { background-color:#ecd9df;}tr:hover { cursor:pointer; } #FenPage { width:1124px; height:25px; line-height:25px; text-align:center; margin:20px auto 20px auto;}.linka { color:#0094ff; cursor:pointer;}.fenyebtn {width:60px; height:25px; border:1px solid #ced9df; border-radius:5px; text-align:center; line-height:25px; float:right;}.fenyebtn2 { width:60px; height:25px; border:1px solid #ced9df; border-radius:5px; text-align:center; line-height:25px;margin-left:10px;float:right;}.toPageIndex { width:60px;height:25px; background-image:url("images/inputbg.gif"); margin-left:10px; background-repeat:repeat-x;border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; text-align:center; float:right;}.gotoPagebtn { width:60px; height:25px; border:1px solid #ced9df; border-radius:5px; text-align:center; line-height:25px;margin-left:10px;float:right; background-color:#ced9df;}.deletebtn {float:left;width:100px; color:#000; height:25px; background-color:#ced9df; border:1px solid #ced9df; border-radius:5px; text-align:center;}a { color:#08a5e0;}.droplist { background-image:url("images/inputbg.gif"); background-repeat:repeat-x; width:120px; height:25px; border:1px solid #ced9df;}.checkstyle { float:left;}.imgheadstyle { width:50px; height:50px; margin-top:10px;}.lbsubscribeCount { font-size:26px;}#shownewgroup { width:300px; height:200px; background-color:white;z-index:9999; border:2px solid #DDD; top:40%; left:40%; background-color:#fff; position:fixed;margin:-100px auto auto -100px; display:none;}#shownewgroupzhezhaoceng { height:200%; width:200%; left:0px; top:0px;position:fixed; z-index:9998; background:rgb(50,50,50);background:rgba(0,0,0,0.5); display:none;}.closeLogin { height:30px; border-bottom:2px solid #31bb34; text-align:right; line-height:30px; font-size:14px; font-weight:bold;}a:hover { cursor:pointer;}#updateremark { width:300px; height:200px; background-color:white;z-index:9999; border:2px solid #DDD; top:40%; left:40%; background-color:#fff; position:fixed;margin:-100px auto auto -100px; display:none;}#updateremark_zhezhaoceng { height:100%; width:100%; left:0px; top:0px;position:fixed; z-index:9998; background:rgb(50,50,50);background:rgba(0,0,0,0.5); display:none;}</style> <script src="../js/jquery-1.7.1.min.js" type="text/javascript"></script><script type="text/javascript">$(document).ready(function () {$(".newGroups").click(function () {$("#shownewgroupzhezhaoceng").show();$("#shownewgroup").show();}), $(".closeloginpage").click(function () { $("#shownewgroupzhezhaoceng").hide(); $("#shownewgroup").hide(); })})</script></head><body><form id="form1" runat="server"><div class="place"><span>位置:</span><ul class="placeul"><li><a href="WelCome.aspx" target="rightFrame">首页</a></li><li>微信管理</li><li>德桥员工服务中心--关注者列表管理</li></ul> </div><asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager><asp:UpdatePanel ID="UpdatePanel1" runat="server"><ContentTemplate><div id="shownewgroup"><div class="closeLogin"><a class="closeloginpage"><span style="float:left; color:#08a5e0; font-size:18px; text-indent:5px;">新建分组</span>关闭</a> </div> <div style="font-size:12px; height:40px; color:red; line-height:40px;"> 30字符以内</div> <input type="text" id="txtgroupsName" name="txtgroupsName" class="inputstyle" maxlength="30" runat="server" value="分组名称" onfocus="if(value==defaultValue){value="";this.style.color="#000"}" onblur="if(!value){value=defaultValue;this.style.color="#999"}" style="color:#999"/><asp:LinkButton ID="LinkBtnCreateGroup" runat="server" OnClick="LinkBtnCreateGroup_Click"><div style="background-image:url("images/buttonbg.png"); width:111px; height:35px; line-height:35px; font-weight:bold;float:left; margin-top:20px; margin-left:5px; text-align:center;color:#fff;"> 确定创建</div></asp:LinkButton> </div> <div id="shownewgroupzhezhaoceng"></div><div style=" border-bottom:2px solid #31bb34; height:30px; margin-top:10px; text-indent:10px; font-size:22px; line-height:30px; width:100%;"><span style="float:left; font-size:16px;">已关注人数</span><span style="color:red;"><asp:Label ID="lbsubscribeCount" CssClass="lbsubscribeCount" runat="server" Text="Label"></asp:Label> </span></div><div id="title"><asp:CheckBox ID="CheckAll" runat="server" CssClass="checkstyle" OnCheckedChanged="CheckAll_CheckedChanged" /><span style="float:left;">全选 </span><asp:DropDownList ID="DDlAddgroups" CssClass="DDlAddgroups" runat="server" OnSelectedIndexChanged="DDlAddgroups_SelectedIndexChanged"></asp:DropDownList> <asp:DropDownList ID="DDLgroups" runat="server"></asp:DropDownList><a class="newGroups"><div style="background-image:url("images/buttonbg.png"); width:111px; height:35px; line-height:35px; margin:auto 20px auto 10px; font-weight:bold;float:left; text-align:center;color:#fff;"> + 新建分组</div></a> <a href="WxGroupManageList.aspx"><div style="background-image:url("images/buttonbg.png"); width:111px; height:35px; line-height:35px; margin:auto 20px auto 10px; font-weight:bold;float:left; text-align:center;color:#fff;">分组管理</div></a><a href="WeiXinUserList.aspx"><div style="background-image:url("images/buttonbg.png"); width:111px; height:35px; line-height:35px; margin:auto 20px auto 10px; font-weight:bold;float:left; text-align:center;color:#fff;">刷 新</div></a><%--<input type="text" id="txtName" name="txtName" class="inputstyle" runat="server" value="用户昵称" onfocus="if(value==defaultValue){value="";this.style.color="#000"}" onblur="if(!value){value=defaultValue;this.style.color="#999"}" style="color:#999"/> <asp:LinkButton ID="LinkButton1" runat="server"><div style="background-image:url("images/buttonbg.png"); width:111px; height:35px; line-height:35px; font-weight:bold;float:left; text-align:center;color:#fff;"> 查询</div></asp:LinkButton>--%></div> <table class="wxusertab"><asp:Repeater ID="RepeaterWxUserList" runat="server" OnItemDataBound="RepeaterWxUserList_ItemDataBound"><HeaderTemplate><tr><th></th><th>OpenID</th><th>头像</th><th>昵称(备注名)</th><th>关注时间</th><th>所属分组</th><th>操作</th></tr></HeaderTemplate><ItemTemplate><tr style="width:100%; line-height:50px;"><td style="width:30px;"> <asp:CheckBox ID="CheckIn" runat="server" CssClass="checkstyle" /> <%--OnCheckedChanged="CheckIn_CheckedChanged"--%></td><td style="width:150px;"><asp:Label ID="lbwxopenID" runat="server" Text=""></asp:Label></td><td style="width:80px;"><asp:Image ID="ImgHeadUrl" runat="server" CssClass="imgheadstyle" /> </td><td style="width:150px;"><asp:Label ID="lbNickName" runat="server" CssClass="checkstyle" Text=""></asp:Label><asp:Label ID="lbRemark" runat="server" Text=""></asp:Label></td><td style="width:130px;"><asp:Label ID="lbSubscrine_time" runat="server" Text=""></asp:Label></td><td style="width:100px;"> <asp:Label ID="lbgroupId" runat="server" CssClass="checkstyle" Visible="false" Text=""></asp:Label><asp:DropDownList ID="DDlAddgroupss" Enabled="false" CssClass="DDlAddgroups" runat="server"><asp:ListItem Value="0">分组名称</asp:ListItem></asp:DropDownList></td><td style="width:110px;"><a href="UpdateRemarkName.aspx?id=<%# Eval("WxopenId") %>"><div style=" border:1px solid #d9d9d9; border-radius:5px; width:111px; height:35px; line-height:35px; font-weight:bold;float:left; text-align:center;"> 修改备注名称</div></a></td></tr></ItemTemplate></asp:Repeater> </table> <div id="FenPage"><asp:LinkButton ID="LinkBtnToPage" CssClass="gotoPagebtn" runat="server" OnClick="LinkBtnToPage_Click">确定</asp:LinkButton><asp:TextBox ID="txtPageIndex" CssClass="toPageIndex" runat="server"></asp:TextBox> <asp:HyperLink ID="lnkLast" runat="server"><span class="fenyebtn2">>>|</span></asp:HyperLink> <asp:HyperLink ID="lnkNext" runat="server"><span class="fenyebtn2">></span></asp:HyperLink> <asp:HyperLink ID="lnkTop" runat="server"><span class="fenyebtn2"><</span></asp:HyperLink> <asp:HyperLink ID="lnkFist" runat="server"><span class="fenyebtn">|<<</span></asp:HyperLink> <span style="float:left;">当前第</span><span style="float:left; color:red;"><asp:Label ID="lbPageIndex" runat="server" Text=""></asp:Label></span><span style="float:left;margin-left:5px;">页/</span><span style="float:left;margin-left:5px;">共</span><span style="float:left;color:red;"><asp:Label ID="lbCountPage" runat="server" Text=""></asp:Label></span><span style="float:left;margin-left:5px;">页</span><span style="float:left;margin-left:10px;"><asp:Label ID="lbPageSize" runat="server" Text=""></asp:Label></span><span style="float:left;margin-left:10px;">共搜索到 </span><span style="float:left;margin-left:5px; color:red;"><asp:Label ID="lbCountData" runat="server" Text=""></asp:Label></span><span style="float:left;margin-left:5px;">条记录.</span></div></ContentTemplate></asp:UpdatePanel></form></body></html>获取用户列表绑定用户信息的后台代码,已包括,修改备注名,将用户移动到分组,新建分组代码

分组统计,用于显示每个分组的已存在人数,无其他作用
上代码:
PagedDataSource pds = new PagedDataSource();protected void Page_Load(object sender, EventArgs e){if(!Page.IsPostBack){BindGroupList();BindGetAllUserOpenIdList();this.DataBind();this.CheckAll.AutoPostBack = true;this.DDlAddgroups.AutoPostBack = true;}//this.DDlAddgroups.Enabled = false;}/// <summary>/// 获取所有用户的openId列表/// </summary>private void BindGetAllUserOpenIdList(){WeiXinServer wxs = new WeiXinServer();///从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string jsonres = "";string content = Cache["AllUserOpenList_content"] as string;if (content == null){jsonres = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + Access_tokento;HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);myRequest.Method = "GET";HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);content = reader.ReadToEnd();reader.Close();//设置缓存的数据7000秒后过期Cache.Insert("AllUserOpenList_content", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);}//使用前需要引用Newtonsoft.json.dll文件JObject jsonObj = JObject.Parse(content);int totalnum = int.Parse(jsonObj["count"].ToString());List<WxOpenIdInfo> openidlist = new List<WxOpenIdInfo>();for (int i = 0; i < totalnum;i++ ){WxOpenIdInfo wxopeninfo = new WxOpenIdInfo();wxopeninfo.WxopenId = jsonObj["data"]["openid"][i].ToString();openidlist.Add(wxopeninfo);}pds.DataSource = openidlist;pds.AllowPaging = true;pds.PageSize = 20;//每页显示为20条int CurrentPage;if (!String.IsNullOrWhiteSpace(this.txtPageIndex.Text.ToString().Trim())){CurrentPage = Convert.ToInt32(this.txtPageIndex.Text.ToString().Trim());}else if (Request.QueryString["Page"] != null){CurrentPage = Convert.ToInt32(Request.QueryString["Page"]);}else{CurrentPage = 1;}pds.CurrentPageIndex = CurrentPage - 1;//当前页的索引就等于当前页码-1;if (!pds.IsFirstPage){//Request.CurrentExecutionFilePath 为当前请求的虚拟路径this.lnkTop.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurrentPage - 1);this.lnkFist.Enabled = this.lnkTop.Enabled = true;this.lnkNext.Enabled = this.lnkLast.Enabled = true;}else{this.lnkFist.Enabled = this.lnkTop.Enabled = false;this.lnkNext.Enabled = this.lnkLast.Enabled = true;this.lnkFist.Attributes.Add("style", "color:#ced9df;");this.lnkTop.Attributes.Add("style", "color:#ced9df;");this.lnkNext.Attributes.Remove("style");this.lnkLast.Attributes.Remove("style");}if (!pds.IsLastPage){//Request.CurrentExecutionFilePath 为当前请求的虚拟路径this.lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurrentPage + 1);this.lnkFist.Enabled = this.lnkTop.Enabled = true;this.lnkNext.Enabled = this.lnkLast.Enabled = true;}else{this.lnkNext.Enabled = this.lnkLast.Enabled = false;this.lnkFist.Enabled = this.lnkTop.Enabled = true;this.lnkNext.Attributes.Add("style", "color:#ced9df;");this.lnkLast.Attributes.Add("style", "color:#ced9df;");this.lnkFist.Attributes.Remove("style");this.lnkTop.Attributes.Remove("style");}this.lnkFist.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(1);//跳转至首页this.lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(pds.PageCount);//跳转至末页this.RepeaterWxUserList.DataSource = pds;this.RepeaterWxUserList.DataBind();this.lbCountData.Text = openidlist.Count.ToString();this.lbPageIndex.Text = (pds.CurrentPageIndex + 1).ToString();this.lbPageSize.Text = "每页" + pds.PageSize.ToString() + "条记录";this.lbCountPage.Text = pds.PageCount.ToString();this.txtPageIndex.Text = (pds.CurrentPageIndex + 1).ToString();if (int.Parse(openidlist.Count.ToString()) <= int.Parse(pds.PageSize.ToString())){this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = false;}else{this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = true;}this.lbsubscribeCount.Text = openidlist.Count.ToString();}/// <summary>/// 绑定分组列表/// </summary>private void BindGroupList(){WeiXinServer wxs = new WeiXinServer();///从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string jsonres = "";string content = Cache["AllGroups_content"] as string;if (content == null){jsonres = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token=" + Access_tokento;HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);myRequest.Method = "GET";HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);content = reader.ReadToEnd();reader.Close();//设置缓存的数据7000秒后过期Cache.Insert("AllGroups_content", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);}//使用前需要引用Newtonsoft.json.dll文件JObject jsonObj = JObject.Parse(content);int groupsnum = jsonObj["groups"].Count();this.DDLgroups.Items.Clear();//清除this.DDlAddgroups.Items.Clear();this.DDLgroups.Items.Insert(0, new ListItem("分组统计", "0"));//添加默认第一个提示this.DDlAddgroups.Items.Insert(0, new ListItem("移动用户到分组", "0"));for (int i = 0; i < groupsnum; i++){this.DDLgroups.Items.Add(new ListItem(jsonObj["groups"][i]["name"].ToString() + "(" + jsonObj["groups"][i]["count"].ToString() + ")", jsonObj["groups"][i]["id"].ToString()));this.DDlAddgroups.Items.Add(new ListItem(jsonObj["groups"][i]["name"].ToString(), jsonObj["groups"][i]["id"].ToString()));}}/// <summary>/// 输入页码提交跳转/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void LinkBtnToPage_Click(object sender, EventArgs e){if (String.IsNullOrWhiteSpace(this.txtPageIndex.Text.ToString().Trim())){ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert("页码不能为空!")", true);this.txtPageIndex.Focus();return;}if (IsNum(this.txtPageIndex.Text.ToString().Trim())){ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert("页码数只能输入数字!")", true);this.txtPageIndex.Focus();this.txtPageIndex.Text = this.lbPageIndex.Text.ToString();return;}if (int.Parse(this.txtPageIndex.Text.ToString().Trim()) > int.Parse(this.lbCountPage.Text.ToString().Trim())){ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert("所输页数不能大于总页数!")", true);this.txtPageIndex.Focus();this.txtPageIndex.Text = this.lbPageIndex.Text.ToString();return;}BindGetAllUserOpenIdList();}/// <summary>/// 判断是否是数字/// </summary>/// <param name="text"></param>/// <returns></returns>public static bool IsNum(string text) //{for (int i = 0; i < text.Length; i++){if (!Char.IsNumber(text, i)){return true; //输入的不是数字}}return false; //否则是数字}/// <summary>/// 绑定用户基本信息事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void RepeaterWxUserList_ItemDataBound(object sender, RepeaterItemEventArgs e){//CheckBox checkIn = e.Item.FindControl("CheckIn") as CheckBox;//checkIn.AutoPostBack = true;if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){WxOpenIdInfo wxopen = e.Item.DataItem as WxOpenIdInfo;Label lbwxopenID = e.Item.FindControl("lbwxopenID") as Label;lbwxopenID.Text = wxopen.WxopenId.ToString();//根据OpenID获取用户基本信息。缓存处理WeiXinServer wxs = new WeiXinServer();///从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string jsonres ="https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + Access_tokento + "&openid=" + lbwxopenID.Text.ToString();HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);myRequest.Method = "GET";HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);string content = reader.ReadToEnd();reader.Close();//使用前需要引用Newtonsoft.json.dll文件JObject jsonObj = JObject.Parse(content);Image ImgHeadUrl = e.Item.FindControl("ImgHeadUrl") as Image;Label lbNickName = e.Item.FindControl("lbNickName") as Label;Label lbRemark = e.Item.FindControl("lbRemark") as Label;Label lbSubscrine_time = e.Item.FindControl("lbSubscrine_time") as Label;Label lbgroupId = e.Item.FindControl("lbgroupId") as Label;DropDownList DDlAddgroupss = e.Item.FindControl("DDlAddgroupss") as DropDownList;lbNickName.Text = jsonObj["nickname"].ToString();if (!String.IsNullOrWhiteSpace(jsonObj["remark"].ToString())){lbRemark.Text = "(" + jsonObj["remark"].ToString() + ")";}ImgHeadUrl.ImageUrl = jsonObj["headimgurl"].ToString();lbgroupId.Text = jsonObj["groupid"].ToString();//获取关注时间int totaltiem = int.Parse(jsonObj["subscribe_time"].ToString());//将整型格式时间转换为时间格式DateTime t = new DateTime(1970, 1, 1).AddSeconds(totaltiem);//转换后的时间会比原有时间小8个小时,因此需要加上8个小时lbSubscrine_time.Text = t.AddHours(8).ToString();string jjjjjjjjjddd = Cache["AllGroups_content"] as string;if (jjjjjjjjjddd == null){jsonres = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token=" + Access_tokento;HttpWebRequest myRequestss = (HttpWebRequest)WebRequest.Create(jsonres);myRequest.Method = "GET";HttpWebResponse myResponsess = (HttpWebResponse)myRequest.GetResponse();StreamReader readerss = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);jjjjjjjjjddd = reader.ReadToEnd();reader.Close();//设置缓存的数据7000秒后过期Cache.Insert("AllGroups_content", jjjjjjjjjddd, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);}//使用前需要引用Newtonsoft.json.dll文件JObject jsonObjss = JObject.Parse(jjjjjjjjjddd);int groupsnumss = jsonObjss["groups"].Count();for (int i = 0; i < groupsnumss;i++ ){if (jsonObjss["groups"][i]["id"].ToString().Equals(lbgroupId.Text.ToString())){DDlAddgroupss.SelectedItem.Text = jsonObjss["groups"][i]["name"].ToString();}}}}/// <summary>/// 创建分组/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void LinkBtnCreateGroup_Click(object sender, EventArgs e){if (this.txtgroupsName.Value.ToString().Equals("分组名称")){////ScriptManager.RegisterClientScriptBlock(this.Page,this.GetType(),"","alert("不能为空!")",true);this.txtgroupsName.Focus();return;}WeiXinServer wxs = new WeiXinServer();string res = "";///从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string posturl = "https://api.weixin.qq.com/cgi-bin/groups/create?access_token=" + Access_tokento;//string postData = "{"group":{"name":""+this.txtgroupsName.Value.ToString().Trim()+""}}";string postData = "{"group":{"name":""+this.txtgroupsName.Value.ToString().Trim()+""}}";res = wxs.GetPage(posturl, postData);ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert("创建成功!如未显示,请退出重新登录即可!");location="WeiXinUserList.aspx";", true);}/// <summary>/// 全选、全不选/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void CheckAll_CheckedChanged(object sender, EventArgs e){CheckBox checkAll = (CheckBox)sender;foreach (RepeaterItem item in this.RepeaterWxUserList.Items){CheckBox checkIn = (CheckBox)item.FindControl("CheckIn");checkIn.Checked = checkAll.Checked;}}/// <summary>/// 移动用户到分组/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void DDlAddgroups_SelectedIndexChanged(object sender, EventArgs e){///取得分组IDstring groupId = this.DDlAddgroups.SelectedValue.ToString();//this.Label1.Text = groupId.ToString();Boolean bools = false;foreach (RepeaterItem item in this.RepeaterWxUserList.Items){CheckBox checkIn = (CheckBox)item.FindControl("CheckIn");if (checkIn.Checked){bools = true;Label lbwxopenID = item.FindControl("lbwxopenID") as Label;WeiXinServer wxs = new WeiXinServer();string res = "";///从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string posturl = "https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token=" + Access_tokento;//POST数据例子:{"openid":"oDF3iYx0ro3_7jD4HFRDfrjdCM58","to_groupid":108}//string postData = "{"openid":"" + openid.ToString().Trim() + "","remark":"" + this.txtRemarkName.Value.ToString() + ""}";string postData = "{"openid":"" + lbwxopenID.Text.ToString() + "","to_groupid":"" + groupId.ToString() + ""}";res = wxs.GetPage(posturl, postData);//使用前需要引用Newtonsoft.json.dll文件JObject jsonObj = JObject.Parse(res);///获取返回结果的正确|true|false,string isright = jsonObj["errcode"].ToString();//0string istrueorfalse = jsonObj["errmsg"].ToString();//okif (isright.Equals("0") && istrueorfalse.Equals("ok")){ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert("移动用户成功!");location="WeiXinUserList.aspx";", true);}else{ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert("移动用户失败!");", true);return;}}}if (!bools){ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert("未选中项!");location="WeiXinUserList.aspx";", true);return;}} WeiXinServer wxs = new WeiXinServer();是单独创建的一个类,主要用来获取通行证和加载流的方法,代码如下:
/// <summary>/// 微信服务类/// </summary>public class WeiXinServer{/// <summary>/// 获取通行证/// </summary>/// <returns></returns>public string GetAccessToken(){string url_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=此处应该填写公众的appid&secret=此处应该填写公众号的secret";HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url_token);myRequest.Method = "GET";HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);string content = reader.ReadToEnd();reader.Close();return content;}public string GetPage(string p, string postData){Stream outstream = null;Stream instream = null;StreamReader sr = null;HttpWebResponse response = null;HttpWebRequest request = null;Encoding encoding = Encoding.UTF8;byte[] data = encoding.GetBytes(postData);// 准备请求...try{// 设置参数request = WebRequest.Create(p) as HttpWebRequest;CookieContainer cookieContainer = new CookieContainer();request.CookieContainer = cookieContainer;request.AllowAutoRedirect = true;request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";request.ContentLength = data.Length;outstream = request.GetRequestStream();outstream.Write(data, 0, data.Length);outstream.Close();//发送请求并获取相应回应数据response = request.GetResponse() as HttpWebResponse;//直到request.GetResponse()程序才开始向目标网页发送Post请求instream = response.GetResponseStream();sr = new StreamReader(instream, encoding);//返回结果网页(html)代码string content = sr.ReadToEnd();string err = string.Empty;return content;}catch (Exception ex){string err = ex.Message;return string.Empty;}}}修改备注页面的代码:
protected void Page_Load(object sender, EventArgs e){if(Request.QueryString["id"]!=null){String openid = Request.QueryString["id"].ToString();this.txtOpenId.Value = openid.ToString();//根据OpenID获取用户基本信息。缓存处理WeiXinServer wxs = new WeiXinServer();///从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string jsonres = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + Access_tokento + "&openid=" + openid;HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);myRequest.Method = "GET";HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);string content = reader.ReadToEnd();reader.Close();//使用前需要引用Newtonsoft.json.dll文件JObject jsonObj = JObject.Parse(content); //假如备注名不为空,给备注名文本框赋值,显示原有的备注名if (!String.IsNullOrWhiteSpace(jsonObj["remark"].ToString())){this.txtRemarkName.Value = jsonObj["remark"].ToString();}}}/// <summary>/// 设置备注名/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void LinkBtnSet_Click(object sender, EventArgs e){ String openid = Request.QueryString["id"].ToString();WeiXinServer wxs = new WeiXinServer();string res = "";///从缓存读取accesstokenstring Access_token = Cache["Access_token"] as string;if (Access_token == null){//如果为空,重新获取Access_token = wxs.GetAccessToken();//设置缓存的数据7000秒后过期Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);}string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);string posturl = "https://api.weixin.qq.com/cgi-bin/user/info/updateremark?access_token=" + Access_tokento;string postData = "{"openid":"" + openid.ToString().Trim() + "","remark":"" + this.txtRemarkName.Value.ToString() + ""}";res = wxs.GetPage(posturl, postData);//使用前需药引用Newtonsoft.json.dll文件JObject jsonObj = JObject.Parse(res);///获取返回结果的正确|true|false,string isright = jsonObj["errcode"].ToString();//0string istrueorfalse = jsonObj["errmsg"].ToString();//okif (isright.Equals("0") && istrueorfalse.Equals("ok")){ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert("修改备注成功!");location="WeiXinUserList.aspx";", true);}else{ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert("修改备注失败!");", true);}}以上就是已关注用户管理的全部核心代码,仅供参考,希望对大家的学习有所帮助。