<center id="zyi4a"></center>
\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);\/\/跳轉(zhuǎn)至首頁\r\n  this.lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + \"?Page=\" + Convert.ToString(pds.PageCount);\/\/跳轉(zhuǎn)至末頁\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 \/\/\/ 輸入頁碼提交跳轉(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('頁碼不能為空!')\", 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  \/\/將整型格式時間轉(zhuǎn)換為時間格式\r\n  DateTime t = new DateTime(1970, 1, 1).AddSeconds(totaltiem);\r\n  \/\/轉(zhuǎ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();是單獨建立的一個類,主要用來取得通行證和載入流的方法,程式碼如下:<\/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封包:

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

    錯誤時傳回JSON封包(範例為無效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)站後臺的接口權限表裡(以服務號為例)每天調(diào)用的獲取用戶列表能取得500次,取得使用者基本資訊可以取得500000次,所以說接下來,我在取得使用者清單的時候,會用到快取,別看500次不少了,
    可是真正的用起來快得不得了,先上效果圖如下:

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

    #先來看看用戶列表,官網(wǎng)說獲取用戶的列表返回的是一組群組openID,針對這個特性,我是這麼做的,
    建立一個用於儲存openId的類別

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

    然後再建立使用者資訊的基本類別

     /// <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);//跳轉(zhuǎn)至首頁
      this.lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(pds.PageCount);//跳轉(zhuǎn)至末頁
    
      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>
     /// 輸入頁碼提交跳轉(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;頁碼不能為空!&#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());
      //將整型格式時間轉(zhuǎn)換為時間格式
      DateTime t = new DateTime(1970, 1, 1).AddSeconds(totaltiem);
      //轉(zhuǎn)換后的時間會比原有時間小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;移動用戶失?。?amp;#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();是單獨建立的一個類,主要用來取得通行證和載入流的方法,程式碼如下:

     /// <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)其他相關文章!

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

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅(qū)動的應用程序,用於創(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 教程
    1600
    29
    PHP教程
    1502
    276
    PHP微信開發(fā):如何實作訊息加密解密 PHP微信開發(fā):如何實作訊息加密解密 May 13, 2023 am 11:40 AM

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

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

    在微信公眾號開發(fā)中,投票功能經(jīng)常被運用。投票功能是讓使用者快速參與互動的好方式,也是舉辦活動和調(diào)查意見的重要工具。本文將為您介紹如何使用PHP實作微信投票功能。在取得微信公眾號授權首先,你需要取得微信公眾號的授權。在微信公眾平臺上,你需要設定微信公眾號碼的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ī)模最大的社群平臺之一,隨著行動網(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實作微信使用者標籤管理功能。一、取得微信用戶openid在使用微信用戶標籤管理功能之前,我們首先需要取得用戶的openid。在微信公眾號開發(fā)中,透過使用者授權的方式取得openid是比較常見的做法。在使用者授權完成後,我們可以透過以下程式碼取得用

    PHP微信開發(fā):如何實作群發(fā)訊息傳送記錄 PHP微信開發(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

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

    See all articles