<bdo id="7kjt2"></bdo>

  • \r\n \r\n \r\n  位置:<\/span>\r\n  \r\n   
  • 首頁<\/a><\/li>\r\n   
  • 微信管理<\/li>\r\n   
  • 德橋員工服務中心--關注者列表管理<\/li>\r\n  <\/ul>\r\n <\/p>\r\n  <\/asp:ScriptManager>\r\n  \r\n  \r\n   \r\n   新建分組<\/span>關閉<\/a>  <\/p>\r\n    30字符以內(nèi)<\/p>\r\n  \r\n   確定創(chuàng)建<\/p><\/asp:LinkButton>\r\n   <\/p>\r\n   <\/p>\r\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   查詢<\/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   昵稱(備注名)<\/th>\r\n   關注時間<\/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    分組名稱<\/asp:ListItem>\r\n    <\/asp:DropDownList>\r\n    <\/td>\r\n    \r\n    '> 修改備注名稱<\/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  當前第<\/span>\r\n  <\/asp:Label><\/span>\r\n  頁\/<\/span>\r\n  共<\/span>\r\n  <\/asp:Label><\/span>\r\n  頁<\/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>

    獲取用戶列表綁定用戶信息的后臺代碼,已包括,修改備注名,將用戶移動到分組,新建分組代碼<\/p>

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

    分組統(tǒng)計,用于顯示每個分組的已存在人數(shù),無其他作用<\/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 \/\/\/ 獲取所有用戶的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ù)據(jù)7000秒后過期\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ù)據(jù)7000秒后過期\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;\/\/每頁顯示為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;\/\/當前頁的索引就等于當前頁碼-1;\r\n  if (!pds.IsFirstPage)\r\n  {\r\n  \/\/Request.CurrentExecutionFilePath 為當前請求的虛擬路徑\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 為當前請求的虛擬路徑\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);\/\/跳轉至首頁\r\n  this.lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + \"?Page=\" + Convert.ToString(pds.PageCount);\/\/跳轉至末頁\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 = \"每頁\" + 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ù)據(jù)7000秒后過期\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ù)據(jù)7000秒后過期\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)計\", \"0\"));\/\/添加默認第一個提示\r\n  this.DDlAddgroups.Items.Insert(0, new ListItem(\"移動用戶到分組\", \"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 \/\/\/ 輸入頁碼提交跳轉\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('頁碼不能為空!')\", 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('頁碼數(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('所輸頁數(shù)不能大于總頁數(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 \/\/\/ 綁定用戶基本信息事件\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獲取用戶基本信息。緩存處理\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ù)據(jù)7000秒后過期\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  \/\/獲取關注時間\r\n  int totaltiem = int.Parse(jsonObj[\"subscribe_time\"].ToString());\r\n  \/\/將整型格式時間轉換為時間格式\r\n  DateTime t = new DateTime(1970, 1, 1).AddSeconds(totaltiem);\r\n  \/\/轉換后的時間會比原有時間小8個小時,因此需要加上8個小時\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ù)據(jù)7000秒后過期\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(\"分組名稱\"))\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ù)據(jù)7000秒后過期\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)建成功!如未顯示,請退出重新登錄即可!');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 \/\/\/ 移動用戶到分組\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ù)據(jù)7000秒后過期\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   \/\/\/獲取返回結果的正確|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   return;\r\n   }\r\n  }\r\n\r\n  }\r\n  if (!bools)\r\n  {\r\n  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('未選中項!');location='WeiXinUserList.aspx';\", true);\r\n  return;\r\n  }\r\n }<\/pre>

     WeiXinServer wxs = new WeiXinServer();是單獨創(chuàng)建的一個類,主要用來獲取通行證和加載流的方法,代碼如下:<\/strong><\/p>

     \/\/\/ \r\n \/\/\/ 微信服務類\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=此處應該填寫公眾的appid&secret=此處應該填寫公眾號的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  \/\/ 準備請求...\r\n  try\r\n  {\r\n  \/\/ 設置參數(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ā)送請求并獲取相應回應數(shù)據(jù)\r\n  response = request.GetResponse() as HttpWebResponse;\r\n  \/\/直到request.GetResponse()程序才開始向目標網(wǎng)頁發(fā)送Post請求\r\n  instream = response.GetResponseStream();\r\n  sr = new StreamReader(instream, encoding);\r\n  \/\/返回結果網(wǎng)頁(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>

    修改備注頁面的代碼:<\/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獲取用戶基本信息。緩存處理\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ù)據(jù)7000秒后過期\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 \/\/\/ 設置備注名\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ù)據(jù)7000秒后過期\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  \/\/\/獲取返回結果的正確|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日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

    首頁 微信小程序 微信開發(fā) asp.net微信開發(fā)已關注用戶管理步驟詳解

    asp.net微信開發(fā)已關注用戶管理步驟詳解

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

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

    公眾號可通過本接口來獲取帳號的關注者列表,關注者列表由一串OpenID(加密后的微信號,每個用戶對每個公眾號的OpenID是唯一的)組成。一次拉取調用最多拉取10000個關注者的OpenID,可以通過多次拉取的方式來滿足需求。

    接口調用請求說明

    http請求方式: GET(請使用https協(xié)議)

    asp.net微信開發(fā)已關注用戶管理步驟詳解

    返回說明

    正確時返回JSON數(shù)據(jù)包:

    asp.net微信開發(fā)已關注用戶管理步驟詳解

    錯誤時返回JSON數(shù)據(jù)包(示例為無效AppID錯誤):

    {"errcode":40013,"errmsg":"invalid appid"}
    附:關注者數(shù)量超過10000時

    當公眾號關注者數(shù)量超過10000時,可通過填寫next_openid的值,從而多次拉取列表的方式來滿足需求。

    具體而言,就是在調用接口時,將上一次調用得到的返回中的next_openid值,作為下一次調用中的next_openid值。

    示例如下:

    公眾賬號A擁有23000個關注的人,想通過拉取關注接口獲取所有關注的人,那么分別請求url如下:
    https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN
    返回結果:

    {
     "total":23000,
     "count":10000,
     "data":{"
     openid":[
     "OPENID1",
     "OPENID2",
     ...,
     "OPENID10000"
     ]
     },
     "next_openid":"OPENID10000"
    }


    https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID1
    返回結果:


    {
     "total":23000,
     "count":10000,
     "data":{
     "openid":[
     "OPENID10001",
     "OPENID10002",
     ...,
     "OPENID20000"
     ]
     },
     "next_openid":"OPENID20000"
    }


    https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID2
    返回結果(關注者列表已返回完時,返回next_openid為空):


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

    微信官方網(wǎng)站后臺的接口權限表里(以服務號為例)每天調用的獲取用戶列表能獲取500次,獲取用戶基本信息可以獲取500000次,所以說接下來,我在獲取用戶列表的時候,會用到緩存,別看500次不少了,
    可是真正的用起來快得不得了,先上效果圖如下:

    asp.net微信開發(fā)已關注用戶管理步驟詳解

    先來看看用戶列表,官網(wǎng)說獲取用戶的列表返回的是一組組openID,針對這個特性,我是這么做的,
    創(chuàng)建一個用于存儲openId的類

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

    然后再創(chuàng)建用戶信息的基本類

     /// <summary>
     /// 微信用戶基本信息類
     /// </summary>
     public class WxUserInfo
     {
     public int subscribe { get; set; }//關注狀態(tài)
    
     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(&#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">首頁</a></li>
       <li>微信管理</li>
       <li>德橋員工服務中心--關注者列表管理</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>關閉</a>  </p>
      <p style="font-size:12px; height:40px; color:red; line-height:40px;">  30字符以內(nèi)</p>
      <input type="text" id="txtgroupsName" name="txtgroupsName" class="inputstyle" maxlength="30" runat="server" value="分組名稱" 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;">已關注人數(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="用戶昵稱" 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;"> 查詢</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>昵稱(備注名)</th>
       <th>關注時間</th>
       <th>所屬分組</th>
       <th>操作</th>
      </tr>
      </HeaderTemplate>
      <ItemTemplate>
       <tr style="width:100%; line-height:50px;">
        <td style="width:30px;">  <asp:CheckBox ID="CheckIn" runat="server" CssClass="checkstyle" /> <%--OnCheckedChanged="CheckIn_CheckedChanged"--%></td>
        <td style="width:150px;"><asp:Label ID="lbwxopenID" runat="server" Text=""></asp:Label>
        </td>
        <td style="width:80px;"><asp:Image ID="ImgHeadUrl" runat="server" CssClass="imgheadstyle" /> </td>
        <td style="width:150px;"><asp:Label ID="lbNickName" runat="server" CssClass="checkstyle" Text=""></asp:Label>
        <asp:Label ID="lbRemark" runat="server" Text=""></asp:Label>
        </td>
        <td style="width:130px;">
        <asp:Label ID="lbSubscrine_time" runat="server" Text=""></asp:Label>
        </td>
        <td style="width:100px;"> 
        <asp:Label ID="lbgroupId" runat="server" CssClass="checkstyle" Visible="false" Text=""></asp:Label>
        <asp:DropDownList ID="DDlAddgroupss" Enabled="false" CssClass="DDlAddgroups" runat="server">
        <asp:ListItem Value="0">分組名稱</asp:ListItem>
        </asp:DropDownList>
        </td>
        <td style="width:110px;">
        <a href=&#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;"> 修改備注名稱</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;">當前第</span>
      <span style="float:left; color:red;"><asp:Label ID="lbPageIndex" runat="server" Text=""></asp:Label></span>
      <span style="float:left;margin-left:5px;">頁/</span>
      <span style="float:left;margin-left:5px;">共</span>
      <span style="float:left;color:red;"><asp:Label ID="lbCountPage" runat="server" Text=""></asp:Label></span>
      <span style="float:left;margin-left:5px;">頁</span>
      <span style="float:left;margin-left:10px;"><asp:Label ID="lbPageSize" runat="server" Text=""></asp:Label></span>
      <span style="float:left;margin-left:10px;">共搜索到 </span>
      <span style="float:left;margin-left:5px; color:red;"><asp:Label ID="lbCountData" runat="server" Text=""></asp:Label></span>
      <span style="float:left;margin-left:5px;">條記錄.</span>
      </p>
      </ContentTemplate>
     </asp:UpdatePanel>
     </form>
    </body>
    </html>

    獲取用戶列表綁定用戶信息的后臺代碼,已包括,修改備注名,將用戶移動到分組,新建分組代碼

    asp.net微信開發(fā)已關注用戶管理步驟詳解

    分組統(tǒng)計,用于顯示每個分組的已存在人數(shù),無其他作用

    上代碼:

     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();
    
      //設置緩存的數(shù)據(jù)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();
    
      //設置緩存的數(shù)據(jù)7000秒后過期
      Cache.Insert("AllUserOpenList_content", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
      }
    
      //使用前需要引用Newtonsoft.json.dll文件
      JObject jsonObj = JObject.Parse(content);
    
    
      int totalnum = int.Parse(jsonObj["count"].ToString());
    
    
      List<WxOpenIdInfo> openidlist = new List<WxOpenIdInfo>();
    
    
      for (int i = 0; i < totalnum;i++ )
      {
      WxOpenIdInfo wxopeninfo = new WxOpenIdInfo();
      wxopeninfo.WxopenId = jsonObj["data"]["openid"][i].ToString();
      openidlist.Add(wxopeninfo);
      }
    
    
      pds.DataSource = openidlist;
      pds.AllowPaging = true;
      pds.PageSize = 20;//每頁顯示為20條
      int CurrentPage;
    
    
      if (!String.IsNullOrWhiteSpace(this.txtPageIndex.Text.ToString().Trim()))
      {
    
      CurrentPage = Convert.ToInt32(this.txtPageIndex.Text.ToString().Trim());
      }
      else if (Request.QueryString["Page"] != null)
      {
      CurrentPage = Convert.ToInt32(Request.QueryString["Page"]);
      }
      else
      {
      CurrentPage = 1;
      }
      pds.CurrentPageIndex = CurrentPage - 1;//當前頁的索引就等于當前頁碼-1;
      if (!pds.IsFirstPage)
      {
      //Request.CurrentExecutionFilePath 為當前請求的虛擬路徑
      this.lnkTop.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurrentPage - 1);
      this.lnkFist.Enabled = this.lnkTop.Enabled = true;
      this.lnkNext.Enabled = this.lnkLast.Enabled = true;
      }
      else
      {
      this.lnkFist.Enabled = this.lnkTop.Enabled = false;
      this.lnkNext.Enabled = this.lnkLast.Enabled = true;
      this.lnkFist.Attributes.Add("style", "color:#ced9df;");
      this.lnkTop.Attributes.Add("style", "color:#ced9df;");
      this.lnkNext.Attributes.Remove("style");
      this.lnkLast.Attributes.Remove("style");
      }
      if (!pds.IsLastPage)
      {
      //Request.CurrentExecutionFilePath 為當前請求的虛擬路徑
      this.lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurrentPage + 1);
      this.lnkFist.Enabled = this.lnkTop.Enabled = true;
      this.lnkNext.Enabled = this.lnkLast.Enabled = true;
      }
      else
      {
      this.lnkNext.Enabled = this.lnkLast.Enabled = false;
      this.lnkFist.Enabled = this.lnkTop.Enabled = true;
      this.lnkNext.Attributes.Add("style", "color:#ced9df;");
      this.lnkLast.Attributes.Add("style", "color:#ced9df;");
      this.lnkFist.Attributes.Remove("style");
      this.lnkTop.Attributes.Remove("style");
      }
      this.lnkFist.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(1);//跳轉至首頁
      this.lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(pds.PageCount);//跳轉至末頁
    
      this.RepeaterWxUserList.DataSource = pds;
      this.RepeaterWxUserList.DataBind();
    
      this.lbCountData.Text = openidlist.Count.ToString();
      this.lbPageIndex.Text = (pds.CurrentPageIndex + 1).ToString();
      this.lbPageSize.Text = "每頁" + pds.PageSize.ToString() + "條記錄";
      this.lbCountPage.Text = pds.PageCount.ToString();
      this.txtPageIndex.Text = (pds.CurrentPageIndex + 1).ToString();
    
      if (int.Parse(openidlist.Count.ToString()) <= int.Parse(pds.PageSize.ToString()))
      {
      this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = false;
      }
      else
      {
      this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = true;
      }
    
      this.lbsubscribeCount.Text = openidlist.Count.ToString();
     }
     /// <summary>
     /// 綁定分組列表
     /// </summary>
     private void BindGroupList()
     {
      WeiXinServer wxs = new WeiXinServer();
    
      ///從緩存讀取accesstoken
      string Access_token = Cache["Access_token"] as string;
    
      if (Access_token == null)
      {
      //如果為空,重新獲取
      Access_token = wxs.GetAccessToken();
    
      //設置緩存的數(shù)據(jù)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();
    
      //設置緩存的數(shù)據(jù)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("分組統(tǒng)計", "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(&#39;頁碼不能為空!&#39;)", true);
      this.txtPageIndex.Focus();
      return;
      }
      if (IsNum(this.txtPageIndex.Text.ToString().Trim()))
      {
      ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;頁碼數(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;所輸頁數(shù)不能大于總頁數(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>
     /// 綁定用戶基本信息事件
     /// </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獲取用戶基本信息。緩存處理
      WeiXinServer wxs = new WeiXinServer();
    
      ///從緩存讀取accesstoken
      string Access_token = Cache["Access_token"] as string;
    
      if (Access_token == null)
      {
       //如果為空,重新獲取
       Access_token = wxs.GetAccessToken();
    
       //設置緩存的數(shù)據(jù)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();
    
       //設置緩存的數(shù)據(jù)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>
     /// 創(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("分組名稱"))
      {
      ////
      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ù)據(jù)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(&#39;創(chuà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>
     /// 移動用戶到分組
     /// </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ù)據(jù)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數(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);
    
       ///獲取返回結果的正確|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);
       return;
       }
      }
    
      }
      if (!bools)
      {
      ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;未選中項!&#39;);location=&#39;WeiXinUserList.aspx&#39;;", true);
      return;
      }
     }

    WeiXinServer wxs = new WeiXinServer();是單獨創(chuàng)建的一個類,主要用來獲取通行證和加載流的方法,代碼如下:

     /// <summary>
     /// 微信服務類
     /// </summary>
     public class WeiXinServer
     {
     /// <summary>
     /// 獲取通行證
     /// </summary>
     /// <returns></returns>
     public string GetAccessToken()
     {
      string url_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=此處應該填寫公眾的appid&secret=此處應該填寫公眾號的secret";
      HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url_token);
      myRequest.Method = "GET";
      HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
      StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
      string content = reader.ReadToEnd();
      reader.Close();
      return content;
     }
     public string GetPage(string p, string postData)
     {
      Stream outstream = null;
      Stream instream = null;
      StreamReader sr = null;
      HttpWebResponse response = null;
      HttpWebRequest request = null;
      Encoding encoding = Encoding.UTF8;
      byte[] data = encoding.GetBytes(postData);
      // 準備請求...
      try
      {
      // 設置參數(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ā)送請求并獲取相應回應數(shù)據(jù)
      response = request.GetResponse() as HttpWebResponse;
      //直到request.GetResponse()程序才開始向目標網(wǎng)頁發(fā)送Post請求
      instream = response.GetResponseStream();
      sr = new StreamReader(instream, encoding);
      //返回結果網(wǎng)頁(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();
    
      //根據(jù)OpenID獲取用戶基本信息。緩存處理
      WeiXinServer wxs = new WeiXinServer();
    
      ///從緩存讀取accesstoken
      string Access_token = Cache["Access_token"] as string;
    
      if (Access_token == null)
      {
       //如果為空,重新獲取
       Access_token = wxs.GetAccessToken();
    
       //設置緩存的數(shù)據(jù)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();
    
      //設置緩存的數(shù)據(jù)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(&#39;修改備注成功!&#39;);location=&#39;WeiXinUserList.aspx&#39;;", true);
      }
      else
      {
      ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;修改備注失敗!&#39;);", true);
      }
    
     }



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

    本站聲明
    本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內(nèi)容,請聯(lián)系admin@php.cn

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費脫衣服圖片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用于從照片中去除衣服的在線人工智能工具。

    Clothoff.io

    Clothoff.io

    AI脫衣機

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的代碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    功能強大的PHP集成開發(fā)環(huán)境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網(wǎng)頁開發(fā)工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級代碼編輯軟件(SublimeText3)

    熱門話題

    Laravel 教程
    1601
    29
    PHP教程
    1502
    276
    PHP微信開發(fā):如何實現(xiàn)消息加密解密 PHP微信開發(fā):如何實現(xiàn)消息加密解密 May 13, 2023 am 11:40 AM

    PHP是一種開源的腳本語言,廣泛應用于Web開發(fā)和服務器端編程,尤其在微信開發(fā)中得到了廣泛的應用。如今,越來越多的企業(yè)和開發(fā)者開始使用PHP進行微信開發(fā),因為它成為了一款真正的易學易用的開發(fā)語言。在微信開發(fā)中,消息的加密和解密是一個非常重要的問題,因為它們涉及到數(shù)據(jù)的安全性。對于沒有加密和解密方式的消息,黑客可以輕松獲取到其中的數(shù)據(jù),對用戶造成威脅

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

    在微信公眾號開發(fā)中,投票功能經(jīng)常被運用。投票功能是讓用戶快速參與互動的好方式,也是舉辦活動和調查意見的重要工具。本文將為您介紹如何使用PHP實現(xiàn)微信投票功能。獲取微信公眾號授權首先,你需要獲取微信公眾號的授權。在微信公眾平臺上,你需要配置微信公眾號的api地址、官方賬號和公眾號對應的token。在我們使用PHP語言開發(fā)的過程中,我們需要使用微信官方提供的PH

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

    隨著微信的普及,越來越多的企業(yè)開始將其作為營銷工具。而微信群發(fā)功能,則是企業(yè)進行微信營銷的重要手段之一。但是,如果只依靠手動發(fā)送,對于營銷人員來說是一件極為費時費力的工作。所以,開發(fā)一款微信群發(fā)工具就顯得尤為重要。本文將介紹如何使用PHP開發(fā)微信群發(fā)工具。一、準備工作開發(fā)微信群發(fā)工具,我們需要掌握以下幾個技術點:PHP基礎知識微信公眾平臺開發(fā)開發(fā)工具:Sub

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

    微信是目前全球用戶規(guī)模最大的社交平臺之一,隨著移動互聯(lián)網(wǎng)的普及,越來越多的企業(yè)開始意識到微信營銷的重要性。在進行微信營銷時,客服服務是至關重要的一環(huán)。為了更好地管理客服聊天窗口,我們可以借助PHP語言進行微信開發(fā)。一、PHP微信開發(fā)簡介PHP是一種開源的服務器端腳本語言,廣泛運用于Web開發(fā)領域。結合微信公眾平臺提供的開發(fā)接口,我們可以使用PHP語言進行微信

    PHP微信開發(fā):如何實現(xiàn)用戶標簽管理 PHP微信開發(fā):如何實現(xiàn)用戶標簽管理 May 13, 2023 pm 04:31 PM

    在微信公眾號開發(fā)中,用戶標簽管理是一個非常重要的功能,可以讓開發(fā)者更好地了解和管理自己的用戶。本篇文章將介紹如何使用PHP實現(xiàn)微信用戶標簽管理功能。一、獲取微信用戶openid在使用微信用戶標簽管理功能之前,我們首先需要獲取用戶的openid。在微信公眾號開發(fā)中,通過用戶授權的方式獲取openid是比較常見的做法。在用戶授權完成后,我們可以通過以下代碼獲取用

    PHP微信開發(fā):如何實現(xiàn)群發(fā)消息發(fā)送記錄 PHP微信開發(fā):如何實現(xiàn)群發(fā)消息發(fā)送記錄 May 13, 2023 pm 04:31 PM

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

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

    如何使用PHP實現(xiàn)微信公眾號開發(fā)微信公眾號已經(jīng)成為了很多企業(yè)推廣和互動的重要渠道,而PHP作為一種常用的Web語言,也可以用來進行微信公眾號的開發(fā)。本文將介紹一下使用PHP實現(xiàn)微信公眾號開發(fā)的具體步驟。第一步:獲取微信公眾號的開發(fā)者賬號在開始微信公眾號開發(fā)之前,需要先去申請一個微信公眾號的開發(fā)者賬號。具體的注冊流程可以參見微信公眾平臺的官方網(wǎng)

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

    隨著互聯(lián)網(wǎng)和移動智能設備的發(fā)展,微信成為了社交和營銷領域不可或缺的一部分。在這個越來越數(shù)字化的時代,如何使用PHP進行微信開發(fā)已經(jīng)成為了很多開發(fā)者的關注點。本文主要介紹如何使用PHP進行微信開發(fā)的相關知識點,以及其中的一些技巧和注意事項。一、開發(fā)環(huán)境準備在進行微信開發(fā)之前,首先需要準備好相應的開發(fā)環(huán)境。具體來說,需要安裝PHP的運行環(huán)境,以及微信公眾平臺提

    See all articles