• \r\n \r\n \r\n  位置:<\/span>\r\n  \r\n   
  • 首頁(yè)<\/a><\/li>\r\n   
  • 微信管理<\/li>\r\n   
  • 德橋員工服務(wù)中心--關(guān)注者列表管理<\/li>\r\n  <\/ul>\r\n <\/p>\r\n  <\/asp:ScriptManager>\r\n  \r\n  \r\n   \r\n   新建分組<\/span>關(guān)閉<\/a>  <\/p>\r\n    30字符以?xún)?nèi)<\/p>\r\n  \r\n   確定創(chuàng)建<\/p><\/asp:LinkButton>\r\n   <\/p>\r\n   <\/p>\r\n  已關(guān)注人數(shù)<\/span><\/asp:Label> <\/span><\/p>\r\n  \r\n  全選 <\/span>\r\n  \r\n  \r\n  <\/asp:DropDownList>\r\n  \r\n  <\/asp:DropDownList>\r\n   + 新建分組<\/p><\/a>\r\n  分組管理<\/p><\/a>\r\n  刷  新<\/p><\/a>\r\n\r\n<%--  \r\n\r\n   查詢(xún)<\/p><\/asp:LinkButton>--%>\r\n <\/p>\r\n  \r\n \r\n  \r\n  \r\n   <\/th>\r\n   OpenID<\/th>\r\n   頭像<\/th>\r\n   昵稱(chēng)(備注名)<\/th>\r\n   關(guān)注時(shí)間<\/th>\r\n   所屬分組<\/th>\r\n   操作<\/th>\r\n  <\/tr>\r\n  <\/HeaderTemplate>\r\n  \r\n   \r\n       <%--OnCheckedChanged=\"CheckIn_CheckedChanged\"--%><\/td>\r\n    <\/asp:Label>\r\n    <\/td>\r\n     <\/td>\r\n    <\/asp:Label>\r\n    <\/asp:Label>\r\n    <\/td>\r\n    \r\n    <\/asp:Label>\r\n    <\/td>\r\n     \r\n    <\/asp:Label>\r\n    \r\n    分組名稱(chēng)<\/asp:ListItem>\r\n    <\/asp:DropDownList>\r\n    <\/td>\r\n    \r\n    '> 修改備注名稱(chēng)<\/p><\/a>\r\n    <\/td>\r\n   <\/tr>\r\n  <\/ItemTemplate>\r\n <\/asp:Repeater>\r\n  <\/table>\r\n  \r\n  確定<\/asp:LinkButton>\r\n  <\/asp:TextBox> \r\n  >>|<\/span><\/asp:HyperLink> \r\n  ><\/span><\/asp:HyperLink> \r\n   <<\/span><\/asp:HyperLink> \r\n  |<<<\/span><\/asp:HyperLink> \r\n  當(dāng)前第<\/span>\r\n  <\/asp:Label><\/span>\r\n  頁(yè)\/<\/span>\r\n  共<\/span>\r\n  <\/asp:Label><\/span>\r\n  頁(yè)<\/span>\r\n  <\/asp:Label><\/span>\r\n  共搜索到 <\/span>\r\n  <\/asp:Label><\/span>\r\n  條記錄.<\/span>\r\n  <\/p>\r\n  <\/ContentTemplate>\r\n <\/asp:UpdatePanel>\r\n <\/form>\r\n<\/body>\r\n<\/html><\/pre>

    取得使用者清單綁定使用者資訊的後臺(tái)程式碼,已包含,修改備註名,將使用者移至分組,新分組代碼<\/p>

    \"asp.net微信開(kāi)發(fā)已關(guān)注用戶(hù)管理步驟詳解\"<\/p>

    分組統(tǒng)計(jì),用於顯示每個(gè)分組的已存在人數(shù),無(wú)其他作用<\/p>

    上碼:<\/strong><\/p>

     PagedDataSource pds = new PagedDataSource();\r\n protected void Page_Load(object sender, EventArgs e)\r\n {\r\n  if(!Page.IsPostBack)\r\n  {\r\n  BindGroupList();\r\n  BindGetAllUserOpenIdList();\r\n  this.DataBind();\r\n  this.CheckAll.AutoPostBack = true;\r\n  this.DDlAddgroups.AutoPostBack = true;\r\n  }\r\n  \/\/this.DDlAddgroups.Enabled = false;\r\n  \r\n }\r\n \/\/\/ \r\n \/\/\/ 獲取所有用戶(hù)的openId列表\r\n \/\/\/ <\/summary>\r\n private void BindGetAllUserOpenIdList()\r\n {\r\n  WeiXinServer wxs = new WeiXinServer();\r\n\r\n  \/\/\/從緩存讀取accesstoken\r\n  string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n  if (Access_token == null)\r\n  {\r\n  \/\/如果為空,重新獲取\r\n  Access_token = wxs.GetAccessToken();\r\n\r\n  \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n  Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n  }\r\n\r\n  string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n  string jsonres = \"\";\r\n\r\n  string content = Cache[\"AllUserOpenList_content\"] as string;\r\n\r\n  if (content == null)\r\n  {\r\n  jsonres = \"https:\/\/api.weixin.qq.com\/cgi-bin\/user\/get?access_token=\" + Access_tokento;\r\n\r\n  HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);\r\n  myRequest.Method = \"GET\";\r\n  HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();\r\n  StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n  content = reader.ReadToEnd();\r\n  reader.Close();\r\n\r\n  \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n  Cache.Insert(\"AllUserOpenList_content\", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n  }\r\n\r\n  \/\/使用前需要引用Newtonsoft.json.dll文件\r\n  JObject jsonObj = JObject.Parse(content);\r\n\r\n\r\n  int totalnum = int.Parse(jsonObj[\"count\"].ToString());\r\n\r\n\r\n  List openidlist = new List();\r\n\r\n\r\n  for (int i = 0; i < totalnum;i++ )\r\n  {\r\n  WxOpenIdInfo wxopeninfo = new WxOpenIdInfo();\r\n  wxopeninfo.WxopenId = jsonObj[\"data\"][\"openid\"][i].ToString();\r\n  openidlist.Add(wxopeninfo);\r\n  }\r\n\r\n\r\n  pds.DataSource = openidlist;\r\n  pds.AllowPaging = true;\r\n  pds.PageSize = 20;\/\/每頁(yè)顯示為20條\r\n  int CurrentPage;\r\n\r\n\r\n  if (!String.IsNullOrWhiteSpace(this.txtPageIndex.Text.ToString().Trim()))\r\n  {\r\n\r\n  CurrentPage = Convert.ToInt32(this.txtPageIndex.Text.ToString().Trim());\r\n  }\r\n  else if (Request.QueryString[\"Page\"] != null)\r\n  {\r\n  CurrentPage = Convert.ToInt32(Request.QueryString[\"Page\"]);\r\n  }\r\n  else\r\n  {\r\n  CurrentPage = 1;\r\n  }\r\n  pds.CurrentPageIndex = CurrentPage - 1;\/\/當(dāng)前頁(yè)的索引就等于當(dāng)前頁(yè)碼-1;\r\n  if (!pds.IsFirstPage)\r\n  {\r\n  \/\/Request.CurrentExecutionFilePath 為當(dāng)前請(qǐng)求的虛擬路徑\r\n  this.lnkTop.NavigateUrl = Request.CurrentExecutionFilePath + \"?Page=\" + Convert.ToString(CurrentPage - 1);\r\n  this.lnkFist.Enabled = this.lnkTop.Enabled = true;\r\n  this.lnkNext.Enabled = this.lnkLast.Enabled = true;\r\n  }\r\n  else\r\n  {\r\n  this.lnkFist.Enabled = this.lnkTop.Enabled = false;\r\n  this.lnkNext.Enabled = this.lnkLast.Enabled = true;\r\n  this.lnkFist.Attributes.Add(\"style\", \"color:#ced9df;\");\r\n  this.lnkTop.Attributes.Add(\"style\", \"color:#ced9df;\");\r\n  this.lnkNext.Attributes.Remove(\"style\");\r\n  this.lnkLast.Attributes.Remove(\"style\");\r\n  }\r\n  if (!pds.IsLastPage)\r\n  {\r\n  \/\/Request.CurrentExecutionFilePath 為當(dāng)前請(qǐng)求的虛擬路徑\r\n  this.lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + \"?Page=\" + Convert.ToString(CurrentPage + 1);\r\n  this.lnkFist.Enabled = this.lnkTop.Enabled = true;\r\n  this.lnkNext.Enabled = this.lnkLast.Enabled = true;\r\n  }\r\n  else\r\n  {\r\n  this.lnkNext.Enabled = this.lnkLast.Enabled = false;\r\n  this.lnkFist.Enabled = this.lnkTop.Enabled = true;\r\n  this.lnkNext.Attributes.Add(\"style\", \"color:#ced9df;\");\r\n  this.lnkLast.Attributes.Add(\"style\", \"color:#ced9df;\");\r\n  this.lnkFist.Attributes.Remove(\"style\");\r\n  this.lnkTop.Attributes.Remove(\"style\");\r\n  }\r\n  this.lnkFist.NavigateUrl = Request.CurrentExecutionFilePath + \"?Page=\" + Convert.ToString(1);\/\/跳轉(zhuǎn)至首頁(yè)\r\n  this.lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + \"?Page=\" + Convert.ToString(pds.PageCount);\/\/跳轉(zhuǎn)至末頁(yè)\r\n\r\n  this.RepeaterWxUserList.DataSource = pds;\r\n  this.RepeaterWxUserList.DataBind();\r\n\r\n  this.lbCountData.Text = openidlist.Count.ToString();\r\n  this.lbPageIndex.Text = (pds.CurrentPageIndex + 1).ToString();\r\n  this.lbPageSize.Text = \"每頁(yè)\" + pds.PageSize.ToString() + \"條記錄\";\r\n  this.lbCountPage.Text = pds.PageCount.ToString();\r\n  this.txtPageIndex.Text = (pds.CurrentPageIndex + 1).ToString();\r\n\r\n  if (int.Parse(openidlist.Count.ToString()) <= int.Parse(pds.PageSize.ToString()))\r\n  {\r\n  this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = false;\r\n  }\r\n  else\r\n  {\r\n  this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = true;\r\n  }\r\n\r\n  this.lbsubscribeCount.Text = openidlist.Count.ToString();\r\n }\r\n \/\/\/ \r\n \/\/\/ 綁定分組列表\r\n \/\/\/ <\/summary>\r\n private void BindGroupList()\r\n {\r\n  WeiXinServer wxs = new WeiXinServer();\r\n\r\n  \/\/\/從緩存讀取accesstoken\r\n  string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n  if (Access_token == null)\r\n  {\r\n  \/\/如果為空,重新獲取\r\n  Access_token = wxs.GetAccessToken();\r\n\r\n  \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n  Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n  }\r\n\r\n  string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n  string jsonres = \"\";\r\n\r\n  string content = Cache[\"AllGroups_content\"] as string;\r\n\r\n  if (content == null)\r\n  {\r\n  jsonres = \"https:\/\/api.weixin.qq.com\/cgi-bin\/groups\/get?access_token=\" + Access_tokento;\r\n\r\n  HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);\r\n  myRequest.Method = \"GET\";\r\n  HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();\r\n  StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n  content = reader.ReadToEnd();\r\n  reader.Close();\r\n\r\n  \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n  Cache.Insert(\"AllGroups_content\", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n  }\r\n\r\n  \/\/使用前需要引用Newtonsoft.json.dll文件\r\n  JObject jsonObj = JObject.Parse(content);\r\n\r\n\r\n  int groupsnum = jsonObj[\"groups\"].Count();\r\n\r\n  this.DDLgroups.Items.Clear();\/\/清除\r\n  this.DDlAddgroups.Items.Clear();\r\n  this.DDLgroups.Items.Insert(0, new ListItem(\"分組統(tǒng)計(jì)\", \"0\"));\/\/添加默認(rèn)第一個(gè)提示\r\n  this.DDlAddgroups.Items.Insert(0, new ListItem(\"移動(dòng)用戶(hù)到分組\", \"0\"));\r\n  for (int i = 0; i < groupsnum; i++)\r\n  {\r\n  this.DDLgroups.Items.Add(new ListItem(jsonObj[\"groups\"][i][\"name\"].ToString() + \"(\" + jsonObj[\"groups\"][i][\"count\"].ToString() + \")\", jsonObj[\"groups\"][i][\"id\"].ToString()));\r\n  \r\n  this.DDlAddgroups.Items.Add(new ListItem(jsonObj[\"groups\"][i][\"name\"].ToString(), jsonObj[\"groups\"][i][\"id\"].ToString()));\r\n  }\r\n }\r\n \/\/\/ \r\n \/\/\/ 輸入頁(yè)碼提交跳轉(zhuǎn)\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void LinkBtnToPage_Click(object sender, EventArgs e)\r\n {\r\n\r\n  if (String.IsNullOrWhiteSpace(this.txtPageIndex.Text.ToString().Trim()))\r\n  {\r\n  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('頁(yè)碼不能為空!')\", true);\r\n  this.txtPageIndex.Focus();\r\n  return;\r\n  }\r\n  if (IsNum(this.txtPageIndex.Text.ToString().Trim()))\r\n  {\r\n  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('頁(yè)碼數(shù)只能輸入數(shù)字!')\", true);\r\n  this.txtPageIndex.Focus();\r\n  this.txtPageIndex.Text = this.lbPageIndex.Text.ToString();\r\n  return;\r\n  }\r\n  if (int.Parse(this.txtPageIndex.Text.ToString().Trim()) > int.Parse(this.lbCountPage.Text.ToString().Trim()))\r\n  {\r\n  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('所輸頁(yè)數(shù)不能大于總頁(yè)數(shù)!')\", true);\r\n  this.txtPageIndex.Focus();\r\n  this.txtPageIndex.Text = this.lbPageIndex.Text.ToString();\r\n  return;\r\n  }\r\n\r\n  BindGetAllUserOpenIdList();\r\n }\r\n \/\/\/ \r\n \/\/\/ 判斷是否是數(shù)字\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/returns>\r\n public static bool IsNum(string text) \/\/\r\n {\r\n  for (int i = 0; i < text.Length; i++)\r\n  {\r\n  if (!Char.IsNumber(text, i))\r\n  {\r\n   return true; \/\/輸入的不是數(shù)字 \r\n  }\r\n  }\r\n  return false; \/\/否則是數(shù)字\r\n }\r\n \/\/\/ \r\n \/\/\/ 綁定用戶(hù)基本信息事件\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void RepeaterWxUserList_ItemDataBound(object sender, RepeaterItemEventArgs e)\r\n {\r\n  \/\/CheckBox checkIn = e.Item.FindControl(\"CheckIn\") as CheckBox;\r\n\r\n  \/\/checkIn.AutoPostBack = true;\r\n\r\n\r\n  if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)\r\n  {\r\n  WxOpenIdInfo wxopen = e.Item.DataItem as WxOpenIdInfo;\r\n\r\n\r\n  Label lbwxopenID = e.Item.FindControl(\"lbwxopenID\") as Label;\r\n\r\n  lbwxopenID.Text = wxopen.WxopenId.ToString();\r\n\r\n  \/\/根據(jù)OpenID獲取用戶(hù)基本信息。緩存處理\r\n  WeiXinServer wxs = new WeiXinServer();\r\n\r\n  \/\/\/從緩存讀取accesstoken\r\n  string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n  if (Access_token == null)\r\n  {\r\n   \/\/如果為空,重新獲取\r\n   Access_token = wxs.GetAccessToken();\r\n\r\n   \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n   Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n  }\r\n\r\n  string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n  string jsonres =\"https:\/\/api.weixin.qq.com\/cgi-bin\/user\/info?access_token=\" + Access_tokento + \"&openid=\" + lbwxopenID.Text.ToString();\r\n\r\n  HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);\r\n  myRequest.Method = \"GET\";\r\n  HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();\r\n  StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n  string content = reader.ReadToEnd();\r\n  reader.Close();\r\n\r\n  \/\/使用前需要引用Newtonsoft.json.dll文件\r\n  JObject jsonObj = JObject.Parse(content);\r\n\r\n\r\n  Image ImgHeadUrl = e.Item.FindControl(\"ImgHeadUrl\") as Image;\r\n  Label lbNickName = e.Item.FindControl(\"lbNickName\") as Label;\r\n  Label lbRemark = e.Item.FindControl(\"lbRemark\") as Label;\r\n  Label lbSubscrine_time = e.Item.FindControl(\"lbSubscrine_time\") as Label;\r\n\r\n  Label lbgroupId = e.Item.FindControl(\"lbgroupId\") as Label;\r\n\r\n  DropDownList DDlAddgroupss = e.Item.FindControl(\"DDlAddgroupss\") as DropDownList;\r\n\r\n  lbNickName.Text = jsonObj[\"nickname\"].ToString();\r\n\r\n  if (!String.IsNullOrWhiteSpace(jsonObj[\"remark\"].ToString()))\r\n  {\r\n   lbRemark.Text = \"(\" + jsonObj[\"remark\"].ToString() + \")\";\r\n  }\r\n\r\n  ImgHeadUrl.ImageUrl = jsonObj[\"headimgurl\"].ToString();\r\n  lbgroupId.Text = jsonObj[\"groupid\"].ToString();\r\n\r\n  \/\/獲取關(guān)注時(shí)間\r\n  int totaltiem = int.Parse(jsonObj[\"subscribe_time\"].ToString());\r\n  \/\/將整型格式時(shí)間轉(zhuǎn)換為時(shí)間格式\r\n  DateTime t = new DateTime(1970, 1, 1).AddSeconds(totaltiem);\r\n  \/\/轉(zhuǎn)換后的時(shí)間會(huì)比原有時(shí)間小8個(gè)小時(shí),因此需要加上8個(gè)小時(shí)\r\n  lbSubscrine_time.Text = t.AddHours(8).ToString();\r\n\r\n\r\n  string jjjjjjjjjddd = Cache[\"AllGroups_content\"] as string;\r\n\r\n  if (jjjjjjjjjddd == null)\r\n  {\r\n   jsonres = \"https:\/\/api.weixin.qq.com\/cgi-bin\/groups\/get?access_token=\" + Access_tokento;\r\n\r\n   HttpWebRequest myRequestss = (HttpWebRequest)WebRequest.Create(jsonres);\r\n   myRequest.Method = \"GET\";\r\n   HttpWebResponse myResponsess = (HttpWebResponse)myRequest.GetResponse();\r\n   StreamReader readerss = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n   jjjjjjjjjddd = reader.ReadToEnd();\r\n   reader.Close();\r\n\r\n   \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n   Cache.Insert(\"AllGroups_content\", jjjjjjjjjddd, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n  }\r\n\r\n  \/\/使用前需要引用Newtonsoft.json.dll文件\r\n  JObject jsonObjss = JObject.Parse(jjjjjjjjjddd);\r\n\r\n\r\n  int groupsnumss = jsonObjss[\"groups\"].Count();\r\n\r\n  for (int i = 0; i < groupsnumss;i++ )\r\n  {\r\n   if (jsonObjss[\"groups\"][i][\"id\"].ToString().Equals(lbgroupId.Text.ToString()))\r\n   {\r\n   DDlAddgroupss.SelectedItem.Text = jsonObjss[\"groups\"][i][\"name\"].ToString();\r\n   }\r\n  }\r\n\r\n  }\r\n }\r\n \/\/\/ \r\n \/\/\/ 創(chuàng)建分組\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void LinkBtnCreateGroup_Click(object sender, EventArgs e)\r\n {\r\n  if (this.txtgroupsName.Value.ToString().Equals(\"分組名稱(chēng)\"))\r\n  {\r\n  \/\/\/\/\r\n  ScriptManager.RegisterClientScriptBlock(this.Page,this.GetType(),\"\",\"alert('不能為空!')\",true);\r\n  this.txtgroupsName.Focus();\r\n  return;\r\n  }\r\n\r\n\r\n  WeiXinServer wxs = new WeiXinServer();\r\n  string res = \"\";\r\n\r\n  \/\/\/從緩存讀取accesstoken\r\n  string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n  if (Access_token == null)\r\n  {\r\n  \/\/如果為空,重新獲取\r\n  Access_token = wxs.GetAccessToken();\r\n\r\n  \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n  Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n  }\r\n\r\n  string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n\r\n  string posturl = \"https:\/\/api.weixin.qq.com\/cgi-bin\/groups\/create?access_token=\" + Access_tokento;\r\n\r\n  \/\/string postData = \"{\\\"group\\\":{\\\"name\\\":\\\"\"+this.txtgroupsName.Value.ToString().Trim()+\"\\\"}}\";\r\n\r\n  string postData = \"{\\\"group\\\":{\\\"name\\\":\\\"\"+this.txtgroupsName.Value.ToString().Trim()+\"\\\"}}\";\r\n\r\n\r\n  res = wxs.GetPage(posturl, postData);\r\n\r\n\r\n  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('創(chuàng)建成功!如未顯示,請(qǐng)退出重新登錄即可!');location='WeiXinUserList.aspx';\", true);\r\n }\r\n \/\/\/ \r\n \/\/\/ 全選、全不選\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void CheckAll_CheckedChanged(object sender, EventArgs e)\r\n {\r\n  CheckBox checkAll = (CheckBox)sender;\r\n  foreach (RepeaterItem item in this.RepeaterWxUserList.Items)\r\n  {\r\n  CheckBox checkIn = (CheckBox)item.FindControl(\"CheckIn\");\r\n  checkIn.Checked = checkAll.Checked;\r\n  }\r\n }\r\n\r\n \/\/\/ \r\n \/\/\/ 移動(dòng)用戶(hù)到分組\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void DDlAddgroups_SelectedIndexChanged(object sender, EventArgs e)\r\n {\r\n  \/\/\/取得分組ID\r\n  string groupId = this.DDlAddgroups.SelectedValue.ToString();\r\n\r\n  \/\/this.Label1.Text = groupId.ToString();\r\n\r\n  Boolean bools = false;\r\n\r\n  foreach (RepeaterItem item in this.RepeaterWxUserList.Items)\r\n  {\r\n  CheckBox checkIn = (CheckBox)item.FindControl(\"CheckIn\");\r\n\r\n  if (checkIn.Checked)\r\n  {\r\n   bools = true;\r\n\r\n   Label lbwxopenID = item.FindControl(\"lbwxopenID\") as Label;\r\n\r\n\r\n   WeiXinServer wxs = new WeiXinServer();\r\n   string res = \"\";\r\n\r\n   \/\/\/從緩存讀取accesstoken\r\n   string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n   if (Access_token == null)\r\n   {\r\n   \/\/如果為空,重新獲取\r\n   Access_token = wxs.GetAccessToken();\r\n\r\n   \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n   Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n   }\r\n\r\n   string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n\r\n   string posturl = \"https:\/\/api.weixin.qq.com\/cgi-bin\/groups\/members\/update?access_token=\" + Access_tokento;\r\n\r\n\r\n   \/\/POST數(shù)據(jù)例子:{\"openid\":\"oDF3iYx0ro3_7jD4HFRDfrjdCM58\",\"to_groupid\":108}\r\n   \/\/string postData = \"{\\\"openid\\\":\\\"\" + openid.ToString().Trim() + \"\\\",\\\"remark\\\":\\\"\" + this.txtRemarkName.Value.ToString() + \"\\\"}\";\r\n\r\n   string postData = \"{\\\"openid\\\":\\\"\" + lbwxopenID.Text.ToString() + \"\\\",\\\"to_groupid\\\":\\\"\" + groupId.ToString() + \"\\\"}\";\r\n\r\n\r\n   res = wxs.GetPage(posturl, postData);\r\n\r\n\r\n   \/\/使用前需要引用Newtonsoft.json.dll文件\r\n   JObject jsonObj = JObject.Parse(res);\r\n\r\n   \/\/\/獲取返回結(jié)果的正確|true|false,\r\n   string isright = jsonObj[\"errcode\"].ToString();\/\/0\r\n   string istrueorfalse = jsonObj[\"errmsg\"].ToString();\/\/ok\r\n   if (isright.Equals(\"0\") && istrueorfalse.Equals(\"ok\"))\r\n   {\r\n   ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('移動(dòng)用戶(hù)成功!');location='WeiXinUserList.aspx';\", true);\r\n   }\r\n   else\r\n   {\r\n   ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('移動(dòng)用戶(hù)失?。?#39;);\", true);\r\n   return;\r\n   }\r\n  }\r\n\r\n  }\r\n  if (!bools)\r\n  {\r\n  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('未選中項(xiàng)!');location='WeiXinUserList.aspx';\", true);\r\n  return;\r\n  }\r\n }<\/pre>

    ?WeiXinServer wxs = new WeiXinServer();是單獨(dú)建立的一個(gè)類(lèi),主要用來(lái)取得通行證和載入流的方法,程式碼如下:<\/strong><\/p>

     \/\/\/ \r\n \/\/\/ 微信服務(wù)類(lèi)\r\n \/\/\/ <\/summary>\r\n public class WeiXinServer\r\n {\r\n \/\/\/ \r\n \/\/\/ 獲取通行證\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/returns>\r\n public string GetAccessToken()\r\n {\r\n  string url_token = \"https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&appid=此處應(yīng)該填寫(xiě)公眾的appid&secret=此處應(yīng)該填寫(xiě)公眾號(hào)的secret\";\r\n  HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url_token);\r\n  myRequest.Method = \"GET\";\r\n  HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();\r\n  StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n  string content = reader.ReadToEnd();\r\n  reader.Close();\r\n  return content;\r\n }\r\n public string GetPage(string p, string postData)\r\n {\r\n  Stream outstream = null;\r\n  Stream instream = null;\r\n  StreamReader sr = null;\r\n  HttpWebResponse response = null;\r\n  HttpWebRequest request = null;\r\n  Encoding encoding = Encoding.UTF8;\r\n  byte[] data = encoding.GetBytes(postData);\r\n  \/\/ 準(zhǔn)備請(qǐng)求...\r\n  try\r\n  {\r\n  \/\/ 設(shè)置參數(shù)\r\n  request = WebRequest.Create(p) as HttpWebRequest;\r\n  CookieContainer cookieContainer = new CookieContainer();\r\n  request.CookieContainer = cookieContainer;\r\n  request.AllowAutoRedirect = true;\r\n  request.Method = \"POST\";\r\n  request.ContentType = \"application\/x-www-form-urlencoded\";\r\n  request.ContentLength = data.Length;\r\n  outstream = request.GetRequestStream();\r\n  outstream.Write(data, 0, data.Length);\r\n  outstream.Close();\r\n  \/\/發(fā)送請(qǐng)求并獲取相應(yīng)回應(yīng)數(shù)據(jù)\r\n  response = request.GetResponse() as HttpWebResponse;\r\n  \/\/直到request.GetResponse()程序才開(kāi)始向目標(biāo)網(wǎng)頁(yè)發(fā)送Post請(qǐng)求\r\n  instream = response.GetResponseStream();\r\n  sr = new StreamReader(instream, encoding);\r\n  \/\/返回結(jié)果網(wǎng)頁(yè)(html)代碼\r\n  string content = sr.ReadToEnd();\r\n  string err = string.Empty;\r\n  return content;\r\n  }\r\n  catch (Exception ex)\r\n  {\r\n  string err = ex.Message;\r\n  return string.Empty;\r\n  }\r\n }\r\n }<\/pre>

    修改備註頁(yè)面的程式碼:<\/strong> <\/p>

     protected void Page_Load(object sender, EventArgs e)\r\n {\r\n  if(Request.QueryString[\"id\"]!=null)\r\n  {\r\n  String openid = Request.QueryString[\"id\"].ToString();\r\n  this.txtOpenId.Value = openid.ToString();\r\n\r\n  \/\/根據(jù)OpenID獲取用戶(hù)基本信息。緩存處理\r\n  WeiXinServer wxs = new WeiXinServer();\r\n\r\n  \/\/\/從緩存讀取accesstoken\r\n  string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n  if (Access_token == null)\r\n  {\r\n   \/\/如果為空,重新獲取\r\n   Access_token = wxs.GetAccessToken();\r\n\r\n   \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n   Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n  }\r\n\r\n  string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n  string jsonres = \"https:\/\/api.weixin.qq.com\/cgi-bin\/user\/info?access_token=\" + Access_tokento + \"&openid=\" + openid;\r\n\r\n  HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);\r\n  myRequest.Method = \"GET\";\r\n  HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();\r\n  StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n  string content = reader.ReadToEnd();\r\n  reader.Close();\r\n\r\n  \/\/使用前需要引用Newtonsoft.json.dll文件\r\n  JObject jsonObj = JObject.Parse(content);\r\n\r\n        \/\/假如備注名不為空,給備注名文本框賦值,顯示原有的備注名\r\n  if (!String.IsNullOrWhiteSpace(jsonObj[\"remark\"].ToString()))\r\n  {\r\n   this.txtRemarkName.Value = jsonObj[\"remark\"].ToString();\r\n  }\r\n\r\n  }\r\n }\r\n \/\/\/ \r\n \/\/\/ 設(shè)置備注名\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void LinkBtnSet_Click(object sender, EventArgs e)\r\n {\r\n  \r\n\r\n  String openid = Request.QueryString[\"id\"].ToString();\r\n\r\n  WeiXinServer wxs = new WeiXinServer();\r\n  string res = \"\";\r\n\r\n  \/\/\/從緩存讀取accesstoken\r\n  string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n  if (Access_token == null)\r\n  {\r\n  \/\/如果為空,重新獲取\r\n  Access_token = wxs.GetAccessToken();\r\n\r\n  \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n  Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n  }\r\n\r\n  string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n\r\n  string posturl = \"https:\/\/api.weixin.qq.com\/cgi-bin\/user\/info\/updateremark?access_token=\" + Access_tokento;\r\n\r\n  string postData = \"{\\\"openid\\\":\\\"\" + openid.ToString().Trim() + \"\\\",\\\"remark\\\":\\\"\" + this.txtRemarkName.Value.ToString() + \"\\\"}\";\r\n\r\n\r\n  res = wxs.GetPage(posturl, postData);\r\n\r\n\r\n  \/\/使用前需藥引用Newtonsoft.json.dll文件\r\n  JObject jsonObj = JObject.Parse(res);\r\n\r\n  \/\/\/獲取返回結(jié)果的正確|true|false,\r\n  string isright = jsonObj[\"errcode\"].ToString();\/\/0\r\n  string istrueorfalse = jsonObj[\"errmsg\"].ToString();\/\/ok\r\n  if (isright.Equals(\"0\") && istrueorfalse.Equals(\"ok\"))\r\n  {\r\n  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('修改備注成功!');location='WeiXinUserList.aspx';\", true);\r\n  }\r\n  else\r\n  {\r\n  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('修改備注失敗!');\", true);\r\n  }\r\n\r\n }<\/pre>


    <\/p>\n


    <\/p>#"}

    亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

    首頁(yè) 微信小程式 微信開(kāi)發(fā) asp.net微信開(kāi)發(fā)已關(guān)注用戶(hù)管理步驟詳解

    asp.net微信開(kāi)發(fā)已關(guān)注用戶(hù)管理步驟詳解

    Mar 20, 2017 pm 01:48 PM
    asp.net 微信開(kāi)發(fā)

    這篇文章主要介紹了asp.net微信開(kāi)發(fā)中有關(guān)已關(guān)注用戶(hù)管理的相關(guān)內(nèi)容,需要的朋友可以參考下

    公眾號(hào)可透過(guò)本介面來(lái)取得帳號(hào)的追蹤者列表,追蹤者列表由一串OpenID(加密後的微訊號(hào),每個(gè)用戶(hù)對(duì)每個(gè)公眾號(hào)碼的OpenID是唯一的)組成。一次拉取呼叫最多拉取10000個(gè)追蹤者的OpenID,可以透過(guò)多次拉取的方式來(lái)滿(mǎn)足需求。

    介面呼叫請(qǐng)求說(shuō)明

    http請(qǐng)求方式: GET(請(qǐng)使用https協(xié)定)

    asp.net微信開(kāi)發(fā)已關(guān)注用戶(hù)管理步驟詳解

    傳回說(shuō)明

    正確時(shí)傳回JSON封包:

    asp.net微信開(kāi)發(fā)已關(guān)注用戶(hù)管理步驟詳解

    錯(cuò)誤時(shí)傳回JSON封包(範(fàn)例為無(wú)效AppID錯(cuò)誤):

    {" errcode":40013,"errmsg":"invalid appid"}
    附:追蹤者數(shù)量超過(guò)10000時(shí)

    當(dāng)公眾號(hào)追蹤者數(shù)量超過(guò)10000時(shí),可透過(guò)填入next_openid的值,從而多次拉取列表的方式來(lái)滿(mǎn)足需求。

    具體而言,就是在呼叫介面時(shí),將上一次呼叫得到的返回中的next_openid值,作為下一次呼叫中的next_openid值。

    範(fàn)例如下:

    公眾帳號(hào)A擁有23000個(gè)關(guān)注的人,想透過(guò)拉取關(guān)注介面獲取所有關(guān)注的人,那麼分別請(qǐng)求url如下:
    https:// api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN
    返回結(jié)果:

    {
     "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
    傳回結(jié)果:


    {
     "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
    傳回結(jié)果(追蹤者清單已回傳時(shí),返回next_openid為空):


    {
     "total":23000,
     "count":3000,
     "data":{"
     "openid":[
      "OPENID20001",
      "OPENID20002",
      ...,
      "OPENID23000"
     ]
     },
     "next_openid":"OPENID23000"
    }

    微信官方網(wǎng)站後臺(tái)的接口權(quán)限表裡(以服務(wù)號(hào)為例)每天調(diào)用的獲取用戶(hù)列表能取得500次,取得使用者基本資訊可以取得500000次,所以說(shuō)接下來(lái),我在取得使用者清單的時(shí)候,會(huì)用到快取,別看500次不少了,
    可是真正的用起來(lái)快得不得了,先上效果圖如下:

    asp.net微信開(kāi)發(fā)已關(guān)注用戶(hù)管理步驟詳解

    #先來(lái)看看用戶(hù)列表,官網(wǎng)說(shuō)獲取用戶(hù)的列表返回的是一組群組openID,針對(duì)這個(gè)特性,我是這麼做的,
    建立一個(gè)用於儲(chǔ)存openId的類(lèi)別

    public class WxOpenIdInfo
     {
     public string WxopenId { get; set; }//用戶(hù)存放微信用戶(hù)的openId
     }

    然後再建立使用者資訊的基本類(lèi)別

     /// <summary>
     /// 微信用戶(hù)基本信息類(lèi)
     /// </summary>
     public class WxUserInfo
     {
     public int subscribe { get; set; }//關(guān)注狀態(tài)
    
     public string openid { get; set; }//OpenID
    
     public string nickname { get; set; }//昵稱(chēng)
    
     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; }//關(guān)注時(shí)間
    
     public string remark { get; set; }//備注
    
     public string groupid { get; set; }//分組ID
    
     }

    ?使用者清單前臺(tái)代碼

    <%@ 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(&#39;images/inputbg.gif&#39;); 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(&#39;images/th.gif&#39;); 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(&#39;images/inputbg.gif&#39;); 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(&#39;images/inputbg.gif&#39;); 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();
      }),
      $(&#39;.closeloginpage&#39;).click(function () {
      $("#shownewgroupzhezhaoceng").hide();
      $("#shownewgroup").hide();
      })
     })
     </script>
    </head>
    <body>
     <form id="form1" runat="server">
     <p class="place">
      <span>位置:</span>
      <ul class="placeul">
       <li><a href="WelCome.aspx" target="rightFrame">首頁(yè)</a></li>
       <li>微信管理</li>
       <li>德橋員工服務(wù)中心--關(guān)注者列表管理</li>
      </ul>
     </p>
      <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
      <asp:UpdatePanel ID="UpdatePanel1" runat="server">
      <ContentTemplate>
       <p id="shownewgroup">
       <p class="closeLogin"><a class="closeloginpage"><span style="float:left; color:#08a5e0; font-size:18px; text-indent:5px;">新建分組</span>關(guān)閉</a>  </p>
      <p style="font-size:12px; height:40px; color:red; line-height:40px;">  30字符以?xún)?nèi)</p>
      <input type="text" id="txtgroupsName" name="txtgroupsName" class="inputstyle" maxlength="30" runat="server" value="分組名稱(chēng)" onfocus="if(value==defaultValue){value=&#39;&#39;;this.style.color=&#39;#000&#39;}" onblur="if(!value){value=defaultValue;this.style.color=&#39;#999&#39;}" style="color:#999"/>
      <asp:LinkButton ID="LinkBtnCreateGroup" runat="server" OnClick="LinkBtnCreateGroup_Click"><p style="background-image:url(&#39;images/buttonbg.png&#39;); width:111px; height:35px; line-height:35px; font-weight:bold;float:left; margin-top:20px; margin-left:5px; text-align:center;color:#fff;"> 確定創(chuàng)建</p></asp:LinkButton>
       </p>
       <p id="shownewgroupzhezhaoceng"></p>
      <p 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;">已關(guān)注人數(shù)</span><span style="color:red;"><asp:Label ID="lbsubscribeCount" CssClass="lbsubscribeCount" runat="server" Text="Label"></asp:Label> </span></p>
      <p 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"><p style="background-image:url(&#39;images/buttonbg.png&#39;); width:111px; height:35px; line-height:35px; margin:auto 20px auto 10px; font-weight:bold;float:left; text-align:center;color:#fff;"> + 新建分組</p></a>
      <a href="WxGroupManageList.aspx"><p style="background-image:url(&#39;images/buttonbg.png&#39;); width:111px; height:35px; line-height:35px; margin:auto 20px auto 10px; font-weight:bold;float:left; text-align:center;color:#fff;">分組管理</p></a>
      <a href="WeiXinUserList.aspx"><p style="background-image:url(&#39;images/buttonbg.png&#39;); width:111px; height:35px; line-height:35px; margin:auto 20px auto 10px; font-weight:bold;float:left; text-align:center;color:#fff;">刷  新</p></a>
    
    <%--  <input type="text" id="txtName" name="txtName" class="inputstyle" runat="server" value="用戶(hù)昵稱(chēng)" onfocus="if(value==defaultValue){value=&#39;&#39;;this.style.color=&#39;#000&#39;}" onblur="if(!value){value=defaultValue;this.style.color=&#39;#999&#39;}" style="color:#999"/>
    
      <asp:LinkButton ID="LinkButton1" runat="server"><p style="background-image:url(&#39;images/buttonbg.png&#39;); width:111px; height:35px; line-height:35px; font-weight:bold;float:left; text-align:center;color:#fff;"> 查詢(xún)</p></asp:LinkButton>--%>
     </p>
      <table class="wxusertab">
     <asp:Repeater ID="RepeaterWxUserList" runat="server" OnItemDataBound="RepeaterWxUserList_ItemDataBound">
      <HeaderTemplate>
      <tr>
       <th></th>
       <th>OpenID</th>
       <th>頭像</th>
       <th>昵稱(chēng)(備注名)</th>
       <th>關(guān)注時(shí)間</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">分組名稱(chēng)</asp:ListItem>
        </asp:DropDownList>
        </td>
        <td style="width:110px;">
        <a href=&#39;UpdateRemarkName.aspx?id=<%# Eval("WxopenId") %>&#39;><p style=" border:1px solid #d9d9d9; border-radius:5px; width:111px; height:35px; line-height:35px; font-weight:bold;float:left; text-align:center;"> 修改備注名稱(chēng)</p></a>
        </td>
       </tr>
      </ItemTemplate>
     </asp:Repeater>
      </table>
      <p 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;">當(dāng)前第</span>
      <span style="float:left; color:red;"><asp:Label ID="lbPageIndex" runat="server" Text=""></asp:Label></span>
      <span style="float:left;margin-left:5px;">頁(yè)/</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;">頁(yè)</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>
      </p>
      </ContentTemplate>
     </asp:UpdatePanel>
     </form>
    </body>
    </html>

    取得使用者清單綁定使用者資訊的後臺(tái)程式碼,已包含,修改備註名,將使用者移至分組,新分組代碼

    asp.net微信開(kāi)發(fā)已關(guān)注用戶(hù)管理步驟詳解

    分組統(tǒng)計(jì),用於顯示每個(gè)分組的已存在人數(shù),無(wú)其他作用

    上碼:

     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>
     /// 獲取所有用戶(hù)的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();
    
      //設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
      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();
    
      //設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
      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;//每頁(yè)顯示為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;//當(dāng)前頁(yè)的索引就等于當(dāng)前頁(yè)碼-1;
      if (!pds.IsFirstPage)
      {
      //Request.CurrentExecutionFilePath 為當(dāng)前請(qǐng)求的虛擬路徑
      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 為當(dāng)前請(qǐng)求的虛擬路徑
      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);//跳轉(zhuǎn)至首頁(yè)
      this.lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(pds.PageCount);//跳轉(zhuǎn)至末頁(yè)
    
      this.RepeaterWxUserList.DataSource = pds;
      this.RepeaterWxUserList.DataBind();
    
      this.lbCountData.Text = openidlist.Count.ToString();
      this.lbPageIndex.Text = (pds.CurrentPageIndex + 1).ToString();
      this.lbPageSize.Text = "每頁(yè)" + 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();
    
      //設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
      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();
    
      //設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
      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("分組統(tǒng)計(jì)", "0"));//添加默認(rèn)第一個(gè)提示
      this.DDlAddgroups.Items.Insert(0, new ListItem("移動(dòng)用戶(hù)到分組", "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>
     /// 輸入頁(yè)碼提交跳轉(zhuǎn)
     /// </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(&#39;頁(yè)碼不能為空!&#39;)", true);
      this.txtPageIndex.Focus();
      return;
      }
      if (IsNum(this.txtPageIndex.Text.ToString().Trim()))
      {
      ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;頁(yè)碼數(shù)只能輸入數(shù)字!&#39;)", 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(&#39;所輸頁(yè)數(shù)不能大于總頁(yè)數(shù)!&#39;)", true);
      this.txtPageIndex.Focus();
      this.txtPageIndex.Text = this.lbPageIndex.Text.ToString();
      return;
      }
    
      BindGetAllUserOpenIdList();
     }
     /// <summary>
     /// 判斷是否是數(shù)字
     /// </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; //輸入的不是數(shù)字 
      }
      }
      return false; //否則是數(shù)字
     }
     /// <summary>
     /// 綁定用戶(hù)基本信息事件
     /// </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();
    
      //根據(jù)OpenID獲取用戶(hù)基本信息。緩存處理
      WeiXinServer wxs = new WeiXinServer();
    
      ///從緩存讀取accesstoken
      string Access_token = Cache["Access_token"] as string;
    
      if (Access_token == null)
      {
       //如果為空,重新獲取
       Access_token = wxs.GetAccessToken();
    
       //設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
       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();
    
      //獲取關(guān)注時(shí)間
      int totaltiem = int.Parse(jsonObj["subscribe_time"].ToString());
      //將整型格式時(shí)間轉(zhuǎn)換為時(shí)間格式
      DateTime t = new DateTime(1970, 1, 1).AddSeconds(totaltiem);
      //轉(zhuǎn)換后的時(shí)間會(huì)比原有時(shí)間小8個(gè)小時(shí),因此需要加上8個(gè)小時(shí)
      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();
    
       //設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
       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>
     /// 創(chuàng)建分組
     /// </summary>
     /// <param name="sender"></param>
     /// <param name="e"></param>
     protected void LinkBtnCreateGroup_Click(object sender, EventArgs e)
     {
      if (this.txtgroupsName.Value.ToString().Equals("分組名稱(chēng)"))
      {
      ////
      ScriptManager.RegisterClientScriptBlock(this.Page,this.GetType(),"","alert(&#39;不能為空!&#39;)",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();
    
      //設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
      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(&#39;創(chuàng)建成功!如未顯示,請(qǐng)退出重新登錄即可!&#39;);location=&#39;WeiXinUserList.aspx&#39;;", 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>
     /// 移動(dòng)用戶(hù)到分組
     /// </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();
    
       //設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
       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數(shù)據(jù)例子:{"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);
    
       ///獲取返回結(jié)果的正確|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(&#39;移動(dòng)用戶(hù)成功!&#39;);location=&#39;WeiXinUserList.aspx&#39;;", true);
       }
       else
       {
       ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;移動(dòng)用戶(hù)失??!&#39;);", true);
       return;
       }
      }
    
      }
      if (!bools)
      {
      ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;未選中項(xiàng)!&#39;);location=&#39;WeiXinUserList.aspx&#39;;", true);
      return;
      }
     }

    ?WeiXinServer wxs = new WeiXinServer();是單獨(dú)建立的一個(gè)類(lèi),主要用來(lái)取得通行證和載入流的方法,程式碼如下:

     /// <summary>
     /// 微信服務(wù)類(lèi)
     /// </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=此處應(yīng)該填寫(xiě)公眾的appid&secret=此處應(yīng)該填寫(xiě)公眾號(hào)的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);
      // 準(zhǔn)備請(qǐng)求...
      try
      {
      // 設(shè)置參數(shù)
      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();
      //發(fā)送請(qǐng)求并獲取相應(yīng)回應(yīng)數(shù)據(jù)
      response = request.GetResponse() as HttpWebResponse;
      //直到request.GetResponse()程序才開(kāi)始向目標(biāo)網(wǎng)頁(yè)發(fā)送Post請(qǐng)求
      instream = response.GetResponseStream();
      sr = new StreamReader(instream, encoding);
      //返回結(jié)果網(wǎng)頁(yè)(html)代碼
      string content = sr.ReadToEnd();
      string err = string.Empty;
      return content;
      }
      catch (Exception ex)
      {
      string err = ex.Message;
      return string.Empty;
      }
     }
     }

    修改備註頁(yè)面的程式碼:

     protected void Page_Load(object sender, EventArgs e)
     {
      if(Request.QueryString["id"]!=null)
      {
      String openid = Request.QueryString["id"].ToString();
      this.txtOpenId.Value = openid.ToString();
    
      //根據(jù)OpenID獲取用戶(hù)基本信息。緩存處理
      WeiXinServer wxs = new WeiXinServer();
    
      ///從緩存讀取accesstoken
      string Access_token = Cache["Access_token"] as string;
    
      if (Access_token == null)
      {
       //如果為空,重新獲取
       Access_token = wxs.GetAccessToken();
    
       //設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
       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>
     /// 設(shè)置備注名
     /// </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();
    
      //設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
      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);
    
      ///獲取返回結(jié)果的正確|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(&#39;修改備注成功!&#39;);location=&#39;WeiXinUserList.aspx&#39;;", true);
      }
      else
      {
      ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;修改備注失敗!&#39;);", true);
      }
    
     }



    #

    以上是asp.net微信開(kāi)發(fā)已關(guān)注用戶(hù)管理步驟詳解的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

    本網(wǎng)站聲明
    本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費(fèi)脫衣圖片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線(xiàn)上人工智慧工具。

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費(fèi)的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級(jí)程式碼編輯軟體(SublimeText3)

    熱門(mén)話(huà)題

    Laravel 教程
    1597
    29
    PHP教程
    1488
    72
    PHP微信開(kāi)發(fā):如何實(shí)作訊息加密解密 PHP微信開(kāi)發(fā):如何實(shí)作訊息加密解密 May 13, 2023 am 11:40 AM

    PHP是一種開(kāi)源的腳本語(yǔ)言,廣泛應(yīng)用於網(wǎng)頁(yè)開(kāi)發(fā)和伺服器端編程,尤其在微信開(kāi)發(fā)中得到了廣泛的應(yīng)用。如今,越來(lái)越多的企業(yè)和開(kāi)發(fā)者開(kāi)始使用PHP進(jìn)行微信開(kāi)發(fā),因?yàn)樗蔀榱苏嬲囊讓W(xué)易用的開(kāi)發(fā)語(yǔ)言。在微信開(kāi)發(fā)中,訊息的加密和解密是一個(gè)非常重要的問(wèn)題,因?yàn)樗鼈兩婕百Y料的安全性。對(duì)於沒(méi)有加密和解密方式的消息,駭客可以輕鬆取得其中的數(shù)據(jù),對(duì)用戶(hù)造成威脅

    PHP微信開(kāi)發(fā):如何實(shí)現(xiàn)投票功能 PHP微信開(kāi)發(fā):如何實(shí)現(xiàn)投票功能 May 14, 2023 am 11:21 AM

    在微信公眾號(hào)開(kāi)發(fā)中,投票功能經(jīng)常被運(yùn)用。投票功能是讓使用者快速參與互動(dòng)的好方式,也是舉辦活動(dòng)和調(diào)查意見(jiàn)的重要工具。本文將為您介紹如何使用PHP實(shí)作微信投票功能。在取得微信公眾號(hào)授權(quán)首先,你需要取得微信公眾號(hào)的授權(quán)。在微信公眾平臺(tái)上,你需要設(shè)定微信公眾號(hào)碼的api地址、官方帳號(hào)和公眾號(hào)碼對(duì)應(yīng)的token。在我們使用PHP語(yǔ)言開(kāi)發(fā)的過(guò)程中,我們需要使用微信官方提供的PH

    用PHP開(kāi)發(fā)微信群發(fā)工具 用PHP開(kāi)發(fā)微信群發(fā)工具 May 13, 2023 pm 05:00 PM

    隨著微信的普及,越來(lái)越多的企業(yè)開(kāi)始將其作為行銷(xiāo)工具。而微信群發(fā)功能,則是企業(yè)進(jìn)行微信行銷(xiāo)的重要手段之一。但是,如果只依靠手動(dòng)發(fā)送,對(duì)於行銷(xiāo)人員來(lái)說(shuō)是一件極為費(fèi)時(shí)費(fèi)力的工作。所以,開(kāi)發(fā)一款微信群發(fā)工具就顯得格外重要。本文將介紹如何使用PHP開(kāi)發(fā)微信群發(fā)工具。一、準(zhǔn)備工作開(kāi)發(fā)微信群發(fā)工具,我們需要掌握以下幾個(gè)技術(shù)點(diǎn):PHP基礎(chǔ)知識(shí)微信公眾平臺(tái)開(kāi)發(fā)開(kāi)發(fā)工具:Sub

    PHP微信開(kāi)發(fā):如何實(shí)現(xiàn)客服聊天視窗管理 PHP微信開(kāi)發(fā):如何實(shí)現(xiàn)客服聊天視窗管理 May 13, 2023 pm 05:51 PM

    微信是目前全球用戶(hù)規(guī)模最大的社群平臺(tái)之一,隨著行動(dòng)網(wǎng)路的普及,越來(lái)越多的企業(yè)開(kāi)始意識(shí)到微信行銷(xiāo)的重要性。在進(jìn)行微信行銷(xiāo)時(shí),客服服務(wù)是至關(guān)重要的一環(huán)。為了更好地管理客服聊天窗口,我們可以藉助PHP語(yǔ)言進(jìn)行微信開(kāi)發(fā)。一、PHP微信開(kāi)發(fā)簡(jiǎn)介PHP是一種開(kāi)源的伺服器端腳本語(yǔ)言,廣泛用於Web開(kāi)發(fā)領(lǐng)域。結(jié)合微信公眾平臺(tái)提供的開(kāi)發(fā)接口,我們可以使用PHP語(yǔ)言進(jìn)行微信

    PHP微信開(kāi)發(fā):如何實(shí)現(xiàn)使用者標(biāo)籤管理 PHP微信開(kāi)發(fā):如何實(shí)現(xiàn)使用者標(biāo)籤管理 May 13, 2023 pm 04:31 PM

    在微信公眾號(hào)開(kāi)發(fā)中,使用者標(biāo)籤管理是一個(gè)非常重要的功能,可以讓開(kāi)發(fā)者更了解和管理自己的使用者。本篇文章將介紹如何使用PHP實(shí)作微信使用者標(biāo)籤管理功能。一、取得微信用戶(hù)openid在使用微信用戶(hù)標(biāo)籤管理功能之前,我們首先需要取得用戶(hù)的openid。在微信公眾號(hào)開(kāi)發(fā)中,透過(guò)使用者授權(quán)的方式取得openid是比較常見(jiàn)的做法。在使用者授權(quán)完成後,我們可以透過(guò)以下程式碼取得用

    PHP微信開(kāi)發(fā):如何實(shí)作群發(fā)訊息傳送記錄 PHP微信開(kāi)發(fā):如何實(shí)作群發(fā)訊息傳送記錄 May 13, 2023 pm 04:31 PM

    隨著微信成為了人們生活中越來(lái)越重要的通訊工具,其敏捷的訊息傳遞功能迅速受到廣大企業(yè)和個(gè)人的青睞。對(duì)企業(yè)而言,將微信發(fā)展為一個(gè)行銷(xiāo)平臺(tái)已經(jīng)成為趨勢(shì),而微信開(kāi)發(fā)的重要性也逐漸凸顯。在其中,群發(fā)功能更是被廣泛使用,那麼,作為PHP程式設(shè)計(jì)師,如何實(shí)現(xiàn)群發(fā)訊息發(fā)送記錄呢?以下將為大家簡(jiǎn)單介紹一下。 1.了解微信公眾號(hào)相關(guān)開(kāi)發(fā)知識(shí)在了解如何實(shí)現(xiàn)群發(fā)訊息發(fā)送記錄之前,我

    使用PHP實(shí)現(xiàn)微信公眾號(hào)開(kāi)發(fā)的步驟 使用PHP實(shí)現(xiàn)微信公眾號(hào)開(kāi)發(fā)的步驟 Jun 27, 2023 pm 12:26 PM

    如何使用PHP實(shí)現(xiàn)微信公眾號(hào)開(kāi)發(fā)微信公眾號(hào)已經(jīng)成為了許多企業(yè)推廣和互動(dòng)的重要管道,而PHP作為常用的Web語(yǔ)言,也可以用來(lái)進(jìn)行微信公眾號(hào)的開(kāi)發(fā)。本文將介紹使用PHP實(shí)現(xiàn)微信公眾號(hào)開(kāi)發(fā)的具體步驟。第一步:取得微信公眾號(hào)的開(kāi)發(fā)者帳號(hào)在開(kāi)始微信公眾號(hào)開(kāi)發(fā)之前,需要先去申請(qǐng)一個(gè)微信公眾號(hào)的開(kāi)發(fā)者帳號(hào)。具體的註冊(cè)流程可參考微信公眾平臺(tái)的官方網(wǎng)

    如何使用PHP進(jìn)行微信開(kāi)發(fā)? 如何使用PHP進(jìn)行微信開(kāi)發(fā)? May 21, 2023 am 08:37 AM

    隨著網(wǎng)路和行動(dòng)智慧型裝置的發(fā)展,微信成為了社交和行銷(xiāo)領(lǐng)域不可或缺的一部分。在這個(gè)越來(lái)越數(shù)位化的時(shí)代,如何使用PHP進(jìn)行微信開(kāi)發(fā)已經(jīng)成為了許多開(kāi)發(fā)者的關(guān)注點(diǎn)。本文主要介紹如何使用PHP進(jìn)行微信發(fā)展的相關(guān)知識(shí)點(diǎn),以及其中的一些技巧和注意事項(xiàng)。一、開(kāi)發(fā)環(huán)境準(zhǔn)備在進(jìn)行微信開(kāi)發(fā)之前,首先需要準(zhǔn)備好對(duì)應(yīng)的開(kāi)發(fā)環(huán)境。具體來(lái)說(shuō),需要安裝PHP的運(yùn)作環(huán)境,以及微信公眾平臺(tái)提

    See all articles