• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    asp.net微信开发(已关注用户管理)

    公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串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_TOKENnext_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_TOKENnext_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; }//OpenID
    
     public 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>nbsp;nbsp;/div>
      div style="font-size:12px; height:40px; color:red; line-height:40px;">nbsp;nbsp;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;">nbsp;确定创建/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;">全选nbsp;/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;">nbsp;+nbsp;新建分组/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;">刷nbsp;nbsp;新/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;">nbsp;查询/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;">nbsp;nbsp;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;">nbsp;修改备注名称/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>nbsp;
      asp:HyperLink ID="lnkLast" runat="server">span class="fenyebtn2">>>|/span>/asp:HyperLink>nbsp;
      asp:HyperLink ID="lnkNext" runat="server">span class="fenyebtn2">>/span>/asp:HyperLink>nbsp;
       asp:HyperLink ID="lnkTop" runat="server">span class="fenyebtn2">/span>/asp:HyperLink>nbsp;
      asp:HyperLink ID="lnkFist" runat="server">span class="fenyebtn">|/span>/asp:HyperLink>nbsp;
      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;">共搜索到nbsp;/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();
    
      ///从缓存读取accesstoken
      string 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());
    
    
      ListWxOpenIdInfo> openidlist = new ListWxOpenIdInfo>();
    
    
      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();
    
      ///从缓存读取accesstoken
      string 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();
    
      ///从缓存读取accesstoken
      string 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 = "";
    
      ///从缓存读取accesstoken
      string 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)
     {
      ///取得分组ID
      string 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 = "";
    
       ///从缓存读取accesstoken
       string 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();//0
       string istrueorfalse = jsonObj["errmsg"].ToString();//ok
       if (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_credentialappid=此处应该填写公众的appidsecret=此处应该填写公众号的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();
    
      ///从缓存读取accesstoken
      string 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 = "";
    
      ///从缓存读取accesstoken
      string 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();//0
      string istrueorfalse = jsonObj["errmsg"].ToString();//ok
      if (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);
      }
    
     }
    

    本文已被整理到了《ASP.NET微信开发教程汇总》,欢迎大家学习阅读。

    以上就是已关注用户管理的全部核心代码,仅供参考,希望对大家的学习有所帮助。

    您可能感兴趣的文章:
    • .NET微信公众号 用户分组管理
    • asp.net微信开发(用户分组管理)
    • 微信开发(一) asp.net接入
    • asp.net微信开发(永久素材管理)
    • asp.net微信开发(高级群发图文)
    • asp.net微信开发(高级群发文本)
    • asp.net微信开发(消息应答)
    • asp.net微信开发(开发者接入)
    • asp.net开发微信公众平台之获取用户消息并处理
    • ASP.NET微信公众号之用户分组管理web页面
    上一篇:ASP.NET实现根据URL生成网页缩略图的方法
    下一篇:asp.net微信开发(用户分组管理)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    asp.net微信开发(已关注用户管理) asp.net,微信,开发,已,关注,