條記錄.<\/span>\r\n <\/p>\r\n <\/ContentTemplate>\r\n <\/asp:UpdatePanel>\r\n <\/form>\r\n<\/body>\r\n<\/html><\/pre>取得使用者清單綁定使用者資訊的後臺(tái)程式碼,已包含,修改備註名,將使用者移至分組,新分組代碼<\/p>
<\/p>
分組統(tǒng)計(jì),用於顯示每個(gè)分組的已存在人數(shù),無(wú)其他作用<\/p>
上碼:<\/strong><\/p> PagedDataSource pds = new PagedDataSource();\r\n protected void Page_Load(object sender, EventArgs e)\r\n {\r\n if(!Page.IsPostBack)\r\n {\r\n BindGroupList();\r\n BindGetAllUserOpenIdList();\r\n this.DataBind();\r\n this.CheckAll.AutoPostBack = true;\r\n this.DDlAddgroups.AutoPostBack = true;\r\n }\r\n \/\/this.DDlAddgroups.Enabled = false;\r\n \r\n }\r\n \/\/\/ \r\n \/\/\/ 獲取所有用戶(hù)的openId列表\r\n \/\/\/ <\/summary>\r\n private void BindGetAllUserOpenIdList()\r\n {\r\n WeiXinServer wxs = new WeiXinServer();\r\n\r\n \/\/\/從緩存讀取accesstoken\r\n string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n if (Access_token == null)\r\n {\r\n \/\/如果為空,重新獲取\r\n Access_token = wxs.GetAccessToken();\r\n\r\n \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n }\r\n\r\n string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n string jsonres = \"\";\r\n\r\n string content = Cache[\"AllUserOpenList_content\"] as string;\r\n\r\n if (content == null)\r\n {\r\n jsonres = \"https:\/\/api.weixin.qq.com\/cgi-bin\/user\/get?access_token=\" + Access_tokento;\r\n\r\n HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);\r\n myRequest.Method = \"GET\";\r\n HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();\r\n StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n content = reader.ReadToEnd();\r\n reader.Close();\r\n\r\n \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n Cache.Insert(\"AllUserOpenList_content\", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n }\r\n\r\n \/\/使用前需要引用Newtonsoft.json.dll文件\r\n JObject jsonObj = JObject.Parse(content);\r\n\r\n\r\n int totalnum = int.Parse(jsonObj[\"count\"].ToString());\r\n\r\n\r\n List openidlist = new List();\r\n\r\n\r\n for (int i = 0; i < totalnum;i++ )\r\n {\r\n WxOpenIdInfo wxopeninfo = new WxOpenIdInfo();\r\n wxopeninfo.WxopenId = jsonObj[\"data\"][\"openid\"][i].ToString();\r\n openidlist.Add(wxopeninfo);\r\n }\r\n\r\n\r\n pds.DataSource = openidlist;\r\n pds.AllowPaging = true;\r\n pds.PageSize = 20;\/\/每頁(yè)顯示為20條\r\n int CurrentPage;\r\n\r\n\r\n if (!String.IsNullOrWhiteSpace(this.txtPageIndex.Text.ToString().Trim()))\r\n {\r\n\r\n CurrentPage = Convert.ToInt32(this.txtPageIndex.Text.ToString().Trim());\r\n }\r\n else if (Request.QueryString[\"Page\"] != null)\r\n {\r\n CurrentPage = Convert.ToInt32(Request.QueryString[\"Page\"]);\r\n }\r\n else\r\n {\r\n CurrentPage = 1;\r\n }\r\n pds.CurrentPageIndex = CurrentPage - 1;\/\/當(dāng)前頁(yè)的索引就等于當(dāng)前頁(yè)碼-1;\r\n if (!pds.IsFirstPage)\r\n {\r\n \/\/Request.CurrentExecutionFilePath 為當(dāng)前請(qǐng)求的虛擬路徑\r\n this.lnkTop.NavigateUrl = Request.CurrentExecutionFilePath + \"?Page=\" + Convert.ToString(CurrentPage - 1);\r\n this.lnkFist.Enabled = this.lnkTop.Enabled = true;\r\n this.lnkNext.Enabled = this.lnkLast.Enabled = true;\r\n }\r\n else\r\n {\r\n this.lnkFist.Enabled = this.lnkTop.Enabled = false;\r\n this.lnkNext.Enabled = this.lnkLast.Enabled = true;\r\n this.lnkFist.Attributes.Add(\"style\", \"color:#ced9df;\");\r\n this.lnkTop.Attributes.Add(\"style\", \"color:#ced9df;\");\r\n this.lnkNext.Attributes.Remove(\"style\");\r\n this.lnkLast.Attributes.Remove(\"style\");\r\n }\r\n if (!pds.IsLastPage)\r\n {\r\n \/\/Request.CurrentExecutionFilePath 為當(dāng)前請(qǐng)求的虛擬路徑\r\n this.lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + \"?Page=\" + Convert.ToString(CurrentPage + 1);\r\n this.lnkFist.Enabled = this.lnkTop.Enabled = true;\r\n this.lnkNext.Enabled = this.lnkLast.Enabled = true;\r\n }\r\n else\r\n {\r\n this.lnkNext.Enabled = this.lnkLast.Enabled = false;\r\n this.lnkFist.Enabled = this.lnkTop.Enabled = true;\r\n this.lnkNext.Attributes.Add(\"style\", \"color:#ced9df;\");\r\n this.lnkLast.Attributes.Add(\"style\", \"color:#ced9df;\");\r\n this.lnkFist.Attributes.Remove(\"style\");\r\n this.lnkTop.Attributes.Remove(\"style\");\r\n }\r\n this.lnkFist.NavigateUrl = Request.CurrentExecutionFilePath + \"?Page=\" + Convert.ToString(1);\/\/跳轉(zhuǎn)至首頁(yè)\r\n this.lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + \"?Page=\" + Convert.ToString(pds.PageCount);\/\/跳轉(zhuǎn)至末頁(yè)\r\n\r\n this.RepeaterWxUserList.DataSource = pds;\r\n this.RepeaterWxUserList.DataBind();\r\n\r\n this.lbCountData.Text = openidlist.Count.ToString();\r\n this.lbPageIndex.Text = (pds.CurrentPageIndex + 1).ToString();\r\n this.lbPageSize.Text = \"每頁(yè)\" + pds.PageSize.ToString() + \"條記錄\";\r\n this.lbCountPage.Text = pds.PageCount.ToString();\r\n this.txtPageIndex.Text = (pds.CurrentPageIndex + 1).ToString();\r\n\r\n if (int.Parse(openidlist.Count.ToString()) <= int.Parse(pds.PageSize.ToString()))\r\n {\r\n this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = false;\r\n }\r\n else\r\n {\r\n this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = true;\r\n }\r\n\r\n this.lbsubscribeCount.Text = openidlist.Count.ToString();\r\n }\r\n \/\/\/ \r\n \/\/\/ 綁定分組列表\r\n \/\/\/ <\/summary>\r\n private void BindGroupList()\r\n {\r\n WeiXinServer wxs = new WeiXinServer();\r\n\r\n \/\/\/從緩存讀取accesstoken\r\n string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n if (Access_token == null)\r\n {\r\n \/\/如果為空,重新獲取\r\n Access_token = wxs.GetAccessToken();\r\n\r\n \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n }\r\n\r\n string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n string jsonres = \"\";\r\n\r\n string content = Cache[\"AllGroups_content\"] as string;\r\n\r\n if (content == null)\r\n {\r\n jsonres = \"https:\/\/api.weixin.qq.com\/cgi-bin\/groups\/get?access_token=\" + Access_tokento;\r\n\r\n HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);\r\n myRequest.Method = \"GET\";\r\n HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();\r\n StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n content = reader.ReadToEnd();\r\n reader.Close();\r\n\r\n \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n Cache.Insert(\"AllGroups_content\", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n }\r\n\r\n \/\/使用前需要引用Newtonsoft.json.dll文件\r\n JObject jsonObj = JObject.Parse(content);\r\n\r\n\r\n int groupsnum = jsonObj[\"groups\"].Count();\r\n\r\n this.DDLgroups.Items.Clear();\/\/清除\r\n this.DDlAddgroups.Items.Clear();\r\n this.DDLgroups.Items.Insert(0, new ListItem(\"分組統(tǒng)計(jì)\", \"0\"));\/\/添加默認(rèn)第一個(gè)提示\r\n this.DDlAddgroups.Items.Insert(0, new ListItem(\"移動(dòng)用戶(hù)到分組\", \"0\"));\r\n for (int i = 0; i < groupsnum; i++)\r\n {\r\n this.DDLgroups.Items.Add(new ListItem(jsonObj[\"groups\"][i][\"name\"].ToString() + \"(\" + jsonObj[\"groups\"][i][\"count\"].ToString() + \")\", jsonObj[\"groups\"][i][\"id\"].ToString()));\r\n \r\n this.DDlAddgroups.Items.Add(new ListItem(jsonObj[\"groups\"][i][\"name\"].ToString(), jsonObj[\"groups\"][i][\"id\"].ToString()));\r\n }\r\n }\r\n \/\/\/ \r\n \/\/\/ 輸入頁(yè)碼提交跳轉(zhuǎn)\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void LinkBtnToPage_Click(object sender, EventArgs e)\r\n {\r\n\r\n if (String.IsNullOrWhiteSpace(this.txtPageIndex.Text.ToString().Trim()))\r\n {\r\n ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('頁(yè)碼不能為空!')\", true);\r\n this.txtPageIndex.Focus();\r\n return;\r\n }\r\n if (IsNum(this.txtPageIndex.Text.ToString().Trim()))\r\n {\r\n ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('頁(yè)碼數(shù)只能輸入數(shù)字!')\", true);\r\n this.txtPageIndex.Focus();\r\n this.txtPageIndex.Text = this.lbPageIndex.Text.ToString();\r\n return;\r\n }\r\n if (int.Parse(this.txtPageIndex.Text.ToString().Trim()) > int.Parse(this.lbCountPage.Text.ToString().Trim()))\r\n {\r\n ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('所輸頁(yè)數(shù)不能大于總頁(yè)數(shù)!')\", true);\r\n this.txtPageIndex.Focus();\r\n this.txtPageIndex.Text = this.lbPageIndex.Text.ToString();\r\n return;\r\n }\r\n\r\n BindGetAllUserOpenIdList();\r\n }\r\n \/\/\/ \r\n \/\/\/ 判斷是否是數(shù)字\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/returns>\r\n public static bool IsNum(string text) \/\/\r\n {\r\n for (int i = 0; i < text.Length; i++)\r\n {\r\n if (!Char.IsNumber(text, i))\r\n {\r\n return true; \/\/輸入的不是數(shù)字 \r\n }\r\n }\r\n return false; \/\/否則是數(shù)字\r\n }\r\n \/\/\/ \r\n \/\/\/ 綁定用戶(hù)基本信息事件\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void RepeaterWxUserList_ItemDataBound(object sender, RepeaterItemEventArgs e)\r\n {\r\n \/\/CheckBox checkIn = e.Item.FindControl(\"CheckIn\") as CheckBox;\r\n\r\n \/\/checkIn.AutoPostBack = true;\r\n\r\n\r\n if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)\r\n {\r\n WxOpenIdInfo wxopen = e.Item.DataItem as WxOpenIdInfo;\r\n\r\n\r\n Label lbwxopenID = e.Item.FindControl(\"lbwxopenID\") as Label;\r\n\r\n lbwxopenID.Text = wxopen.WxopenId.ToString();\r\n\r\n \/\/根據(jù)OpenID獲取用戶(hù)基本信息。緩存處理\r\n WeiXinServer wxs = new WeiXinServer();\r\n\r\n \/\/\/從緩存讀取accesstoken\r\n string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n if (Access_token == null)\r\n {\r\n \/\/如果為空,重新獲取\r\n Access_token = wxs.GetAccessToken();\r\n\r\n \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n }\r\n\r\n string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n string jsonres =\"https:\/\/api.weixin.qq.com\/cgi-bin\/user\/info?access_token=\" + Access_tokento + \"&openid=\" + lbwxopenID.Text.ToString();\r\n\r\n HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);\r\n myRequest.Method = \"GET\";\r\n HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();\r\n StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n string content = reader.ReadToEnd();\r\n reader.Close();\r\n\r\n \/\/使用前需要引用Newtonsoft.json.dll文件\r\n JObject jsonObj = JObject.Parse(content);\r\n\r\n\r\n Image ImgHeadUrl = e.Item.FindControl(\"ImgHeadUrl\") as Image;\r\n Label lbNickName = e.Item.FindControl(\"lbNickName\") as Label;\r\n Label lbRemark = e.Item.FindControl(\"lbRemark\") as Label;\r\n Label lbSubscrine_time = e.Item.FindControl(\"lbSubscrine_time\") as Label;\r\n\r\n Label lbgroupId = e.Item.FindControl(\"lbgroupId\") as Label;\r\n\r\n DropDownList DDlAddgroupss = e.Item.FindControl(\"DDlAddgroupss\") as DropDownList;\r\n\r\n lbNickName.Text = jsonObj[\"nickname\"].ToString();\r\n\r\n if (!String.IsNullOrWhiteSpace(jsonObj[\"remark\"].ToString()))\r\n {\r\n lbRemark.Text = \"(\" + jsonObj[\"remark\"].ToString() + \")\";\r\n }\r\n\r\n ImgHeadUrl.ImageUrl = jsonObj[\"headimgurl\"].ToString();\r\n lbgroupId.Text = jsonObj[\"groupid\"].ToString();\r\n\r\n \/\/獲取關(guān)注時(shí)間\r\n int totaltiem = int.Parse(jsonObj[\"subscribe_time\"].ToString());\r\n \/\/將整型格式時(shí)間轉(zhuǎn)換為時(shí)間格式\r\n DateTime t = new DateTime(1970, 1, 1).AddSeconds(totaltiem);\r\n \/\/轉(zhuǎn)換后的時(shí)間會(huì)比原有時(shí)間小8個(gè)小時(shí),因此需要加上8個(gè)小時(shí)\r\n lbSubscrine_time.Text = t.AddHours(8).ToString();\r\n\r\n\r\n string jjjjjjjjjddd = Cache[\"AllGroups_content\"] as string;\r\n\r\n if (jjjjjjjjjddd == null)\r\n {\r\n jsonres = \"https:\/\/api.weixin.qq.com\/cgi-bin\/groups\/get?access_token=\" + Access_tokento;\r\n\r\n HttpWebRequest myRequestss = (HttpWebRequest)WebRequest.Create(jsonres);\r\n myRequest.Method = \"GET\";\r\n HttpWebResponse myResponsess = (HttpWebResponse)myRequest.GetResponse();\r\n StreamReader readerss = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n jjjjjjjjjddd = reader.ReadToEnd();\r\n reader.Close();\r\n\r\n \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n Cache.Insert(\"AllGroups_content\", jjjjjjjjjddd, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n }\r\n\r\n \/\/使用前需要引用Newtonsoft.json.dll文件\r\n JObject jsonObjss = JObject.Parse(jjjjjjjjjddd);\r\n\r\n\r\n int groupsnumss = jsonObjss[\"groups\"].Count();\r\n\r\n for (int i = 0; i < groupsnumss;i++ )\r\n {\r\n if (jsonObjss[\"groups\"][i][\"id\"].ToString().Equals(lbgroupId.Text.ToString()))\r\n {\r\n DDlAddgroupss.SelectedItem.Text = jsonObjss[\"groups\"][i][\"name\"].ToString();\r\n }\r\n }\r\n\r\n }\r\n }\r\n \/\/\/ \r\n \/\/\/ 創(chuàng)建分組\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void LinkBtnCreateGroup_Click(object sender, EventArgs e)\r\n {\r\n if (this.txtgroupsName.Value.ToString().Equals(\"分組名稱(chēng)\"))\r\n {\r\n \/\/\/\/\r\n ScriptManager.RegisterClientScriptBlock(this.Page,this.GetType(),\"\",\"alert('不能為空!')\",true);\r\n this.txtgroupsName.Focus();\r\n return;\r\n }\r\n\r\n\r\n WeiXinServer wxs = new WeiXinServer();\r\n string res = \"\";\r\n\r\n \/\/\/從緩存讀取accesstoken\r\n string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n if (Access_token == null)\r\n {\r\n \/\/如果為空,重新獲取\r\n Access_token = wxs.GetAccessToken();\r\n\r\n \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n }\r\n\r\n string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n\r\n string posturl = \"https:\/\/api.weixin.qq.com\/cgi-bin\/groups\/create?access_token=\" + Access_tokento;\r\n\r\n \/\/string postData = \"{\\\"group\\\":{\\\"name\\\":\\\"\"+this.txtgroupsName.Value.ToString().Trim()+\"\\\"}}\";\r\n\r\n string postData = \"{\\\"group\\\":{\\\"name\\\":\\\"\"+this.txtgroupsName.Value.ToString().Trim()+\"\\\"}}\";\r\n\r\n\r\n res = wxs.GetPage(posturl, postData);\r\n\r\n\r\n ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('創(chuàng)建成功!如未顯示,請(qǐng)退出重新登錄即可!');location='WeiXinUserList.aspx';\", true);\r\n }\r\n \/\/\/ \r\n \/\/\/ 全選、全不選\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void CheckAll_CheckedChanged(object sender, EventArgs e)\r\n {\r\n CheckBox checkAll = (CheckBox)sender;\r\n foreach (RepeaterItem item in this.RepeaterWxUserList.Items)\r\n {\r\n CheckBox checkIn = (CheckBox)item.FindControl(\"CheckIn\");\r\n checkIn.Checked = checkAll.Checked;\r\n }\r\n }\r\n\r\n \/\/\/ \r\n \/\/\/ 移動(dòng)用戶(hù)到分組\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void DDlAddgroups_SelectedIndexChanged(object sender, EventArgs e)\r\n {\r\n \/\/\/取得分組ID\r\n string groupId = this.DDlAddgroups.SelectedValue.ToString();\r\n\r\n \/\/this.Label1.Text = groupId.ToString();\r\n\r\n Boolean bools = false;\r\n\r\n foreach (RepeaterItem item in this.RepeaterWxUserList.Items)\r\n {\r\n CheckBox checkIn = (CheckBox)item.FindControl(\"CheckIn\");\r\n\r\n if (checkIn.Checked)\r\n {\r\n bools = true;\r\n\r\n Label lbwxopenID = item.FindControl(\"lbwxopenID\") as Label;\r\n\r\n\r\n WeiXinServer wxs = new WeiXinServer();\r\n string res = \"\";\r\n\r\n \/\/\/從緩存讀取accesstoken\r\n string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n if (Access_token == null)\r\n {\r\n \/\/如果為空,重新獲取\r\n Access_token = wxs.GetAccessToken();\r\n\r\n \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n }\r\n\r\n string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n\r\n string posturl = \"https:\/\/api.weixin.qq.com\/cgi-bin\/groups\/members\/update?access_token=\" + Access_tokento;\r\n\r\n\r\n \/\/POST數(shù)據(jù)例子:{\"openid\":\"oDF3iYx0ro3_7jD4HFRDfrjdCM58\",\"to_groupid\":108}\r\n \/\/string postData = \"{\\\"openid\\\":\\\"\" + openid.ToString().Trim() + \"\\\",\\\"remark\\\":\\\"\" + this.txtRemarkName.Value.ToString() + \"\\\"}\";\r\n\r\n string postData = \"{\\\"openid\\\":\\\"\" + lbwxopenID.Text.ToString() + \"\\\",\\\"to_groupid\\\":\\\"\" + groupId.ToString() + \"\\\"}\";\r\n\r\n\r\n res = wxs.GetPage(posturl, postData);\r\n\r\n\r\n \/\/使用前需要引用Newtonsoft.json.dll文件\r\n JObject jsonObj = JObject.Parse(res);\r\n\r\n \/\/\/獲取返回結(jié)果的正確|true|false,\r\n string isright = jsonObj[\"errcode\"].ToString();\/\/0\r\n string istrueorfalse = jsonObj[\"errmsg\"].ToString();\/\/ok\r\n if (isright.Equals(\"0\") && istrueorfalse.Equals(\"ok\"))\r\n {\r\n ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('移動(dòng)用戶(hù)成功!');location='WeiXinUserList.aspx';\", true);\r\n }\r\n else\r\n {\r\n ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('移動(dòng)用戶(hù)失?。?#39;);\", true);\r\n return;\r\n }\r\n }\r\n\r\n }\r\n if (!bools)\r\n {\r\n ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('未選中項(xiàng)!');location='WeiXinUserList.aspx';\", true);\r\n return;\r\n }\r\n }<\/pre>?WeiXinServer wxs = new WeiXinServer();是單獨(dú)建立的一個(gè)類(lèi),主要用來(lái)取得通行證和載入流的方法,程式碼如下:<\/strong><\/p> \/\/\/ \r\n \/\/\/ 微信服務(wù)類(lèi)\r\n \/\/\/ <\/summary>\r\n public class WeiXinServer\r\n {\r\n \/\/\/ \r\n \/\/\/ 獲取通行證\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/returns>\r\n public string GetAccessToken()\r\n {\r\n string url_token = \"https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&appid=此處應(yīng)該填寫(xiě)公眾的appid&secret=此處應(yīng)該填寫(xiě)公眾號(hào)的secret\";\r\n HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url_token);\r\n myRequest.Method = \"GET\";\r\n HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();\r\n StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n string content = reader.ReadToEnd();\r\n reader.Close();\r\n return content;\r\n }\r\n public string GetPage(string p, string postData)\r\n {\r\n Stream outstream = null;\r\n Stream instream = null;\r\n StreamReader sr = null;\r\n HttpWebResponse response = null;\r\n HttpWebRequest request = null;\r\n Encoding encoding = Encoding.UTF8;\r\n byte[] data = encoding.GetBytes(postData);\r\n \/\/ 準(zhǔn)備請(qǐng)求...\r\n try\r\n {\r\n \/\/ 設(shè)置參數(shù)\r\n request = WebRequest.Create(p) as HttpWebRequest;\r\n CookieContainer cookieContainer = new CookieContainer();\r\n request.CookieContainer = cookieContainer;\r\n request.AllowAutoRedirect = true;\r\n request.Method = \"POST\";\r\n request.ContentType = \"application\/x-www-form-urlencoded\";\r\n request.ContentLength = data.Length;\r\n outstream = request.GetRequestStream();\r\n outstream.Write(data, 0, data.Length);\r\n outstream.Close();\r\n \/\/發(fā)送請(qǐng)求并獲取相應(yīng)回應(yīng)數(shù)據(jù)\r\n response = request.GetResponse() as HttpWebResponse;\r\n \/\/直到request.GetResponse()程序才開(kāi)始向目標(biāo)網(wǎng)頁(yè)發(fā)送Post請(qǐng)求\r\n instream = response.GetResponseStream();\r\n sr = new StreamReader(instream, encoding);\r\n \/\/返回結(jié)果網(wǎng)頁(yè)(html)代碼\r\n string content = sr.ReadToEnd();\r\n string err = string.Empty;\r\n return content;\r\n }\r\n catch (Exception ex)\r\n {\r\n string err = ex.Message;\r\n return string.Empty;\r\n }\r\n }\r\n }<\/pre>修改備註頁(yè)面的程式碼:<\/strong> <\/p> protected void Page_Load(object sender, EventArgs e)\r\n {\r\n if(Request.QueryString[\"id\"]!=null)\r\n {\r\n String openid = Request.QueryString[\"id\"].ToString();\r\n this.txtOpenId.Value = openid.ToString();\r\n\r\n \/\/根據(jù)OpenID獲取用戶(hù)基本信息。緩存處理\r\n WeiXinServer wxs = new WeiXinServer();\r\n\r\n \/\/\/從緩存讀取accesstoken\r\n string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n if (Access_token == null)\r\n {\r\n \/\/如果為空,重新獲取\r\n Access_token = wxs.GetAccessToken();\r\n\r\n \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n }\r\n\r\n string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n string jsonres = \"https:\/\/api.weixin.qq.com\/cgi-bin\/user\/info?access_token=\" + Access_tokento + \"&openid=\" + openid;\r\n\r\n HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);\r\n myRequest.Method = \"GET\";\r\n HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();\r\n StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);\r\n string content = reader.ReadToEnd();\r\n reader.Close();\r\n\r\n \/\/使用前需要引用Newtonsoft.json.dll文件\r\n JObject jsonObj = JObject.Parse(content);\r\n\r\n \/\/假如備注名不為空,給備注名文本框賦值,顯示原有的備注名\r\n if (!String.IsNullOrWhiteSpace(jsonObj[\"remark\"].ToString()))\r\n {\r\n this.txtRemarkName.Value = jsonObj[\"remark\"].ToString();\r\n }\r\n\r\n }\r\n }\r\n \/\/\/ \r\n \/\/\/ 設(shè)置備注名\r\n \/\/\/ <\/summary>\r\n \/\/\/ <\/param>\r\n \/\/\/ <\/param>\r\n protected void LinkBtnSet_Click(object sender, EventArgs e)\r\n {\r\n \r\n\r\n String openid = Request.QueryString[\"id\"].ToString();\r\n\r\n WeiXinServer wxs = new WeiXinServer();\r\n string res = \"\";\r\n\r\n \/\/\/從緩存讀取accesstoken\r\n string Access_token = Cache[\"Access_token\"] as string;\r\n\r\n if (Access_token == null)\r\n {\r\n \/\/如果為空,重新獲取\r\n Access_token = wxs.GetAccessToken();\r\n\r\n \/\/設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期\r\n Cache.Insert(\"Access_token\", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);\r\n }\r\n\r\n string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);\r\n\r\n\r\n string posturl = \"https:\/\/api.weixin.qq.com\/cgi-bin\/user\/info\/updateremark?access_token=\" + Access_tokento;\r\n\r\n string postData = \"{\\\"openid\\\":\\\"\" + openid.ToString().Trim() + \"\\\",\\\"remark\\\":\\\"\" + this.txtRemarkName.Value.ToString() + \"\\\"}\";\r\n\r\n\r\n res = wxs.GetPage(posturl, postData);\r\n\r\n\r\n \/\/使用前需藥引用Newtonsoft.json.dll文件\r\n JObject jsonObj = JObject.Parse(res);\r\n\r\n \/\/\/獲取返回結(jié)果的正確|true|false,\r\n string isright = jsonObj[\"errcode\"].ToString();\/\/0\r\n string istrueorfalse = jsonObj[\"errmsg\"].ToString();\/\/ok\r\n if (isright.Equals(\"0\") && istrueorfalse.Equals(\"ok\"))\r\n {\r\n ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('修改備注成功!');location='WeiXinUserList.aspx';\", true);\r\n }\r\n else\r\n {\r\n ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), \"\", \"alert('修改備注失敗!');\", true);\r\n }\r\n\r\n }<\/pre>
<\/p>\n
<\/p>#"}
首頁(yè)
微信小程式
微信開(kāi)發(fā)
asp.net微信開(kāi)發(fā)已關(guān)注用戶(hù)管理步驟詳解
asp.net微信開(kāi)發(fā)已關(guān)注用戶(hù)管理步驟詳解
Mar 20, 2017 pm 01:48 PM
asp.net
微信開(kāi)發(fā)
這篇文章主要介紹了asp.net微信開(kāi)發(fā)中有關(guān)已關(guān)注用戶(hù)管理的相關(guān)內(nèi)容,需要的朋友可以參考下
公眾號(hào)可透過(guò)本介面來(lái)取得帳號(hào)的追蹤者列表,追蹤者列表由一串OpenID(加密後的微訊號(hào),每個(gè)用戶(hù)對(duì)每個(gè)公眾號(hào)碼的OpenID是唯一的)組成。一次拉取呼叫最多拉取10000個(gè)追蹤者的OpenID,可以透過(guò)多次拉取的方式來(lái)滿(mǎn)足需求。
介面呼叫請(qǐng)求說(shuō)明
http請(qǐng)求方式: GET(請(qǐng)使用https協(xié)定)

傳回說(shuō)明
正確時(shí)傳回JSON封包:

錯(cuò)誤時(shí)傳回JSON封包(範(fàn)例為無(wú)效AppID錯(cuò)誤):
{" errcode":40013,"errmsg":"invalid appid"}
附:追蹤者數(shù)量超過(guò)10000時(shí)
當(dāng)公眾號(hào)追蹤者數(shù)量超過(guò)10000時(shí),可透過(guò)填入next_openid的值,從而多次拉取列表的方式來(lái)滿(mǎn)足需求。
具體而言,就是在呼叫介面時(shí),將上一次呼叫得到的返回中的next_openid值,作為下一次呼叫中的next_openid值。
範(fàn)例如下:
公眾帳號(hào)A擁有23000個(gè)關(guān)注的人,想透過(guò)拉取關(guān)注介面獲取所有關(guān)注的人,那麼分別請(qǐng)求url如下:
https:// api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN
返回結(jié)果:
{
"total":23000,
"count":10000,
"data":{"
openid":[
"OPENID1",
"OPENID2",
...,
"OPENID10000"
]
},
"next_openid":"OPENID10000"
}
#https:/ /api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID1
傳回結(jié)果:
{
"total":23000,
"count":10000,
"data":{
"openid":[
"OPENID10001",
"OPENID10002",
...,
"OPENID20000"
]
},
"next_openid":"OPENID20000"
}
https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID2
傳回結(jié)果(追蹤者清單已回傳時(shí),返回next_openid為空):
{
"total":23000,
"count":3000,
"data":{"
"openid":[
"OPENID20001",
"OPENID20002",
...,
"OPENID23000"
]
},
"next_openid":"OPENID23000"
}
微信官方網(wǎng)站後臺(tái)的接口權(quán)限表裡(以服務(wù)號(hào)為例)每天調(diào)用的獲取用戶(hù)列表能取得500次,取得使用者基本資訊可以取得500000次,所以說(shuō)接下來(lái),我在取得使用者清單的時(shí)候,會(huì)用到快取,別看500次不少了,
可是真正的用起來(lái)快得不得了,先上效果圖如下:

#先來(lái)看看用戶(hù)列表,官網(wǎng)說(shuō)獲取用戶(hù)的列表返回的是一組群組openID,針對(duì)這個(gè)特性,我是這麼做的,
建立一個(gè)用於儲(chǔ)存openId的類(lèi)別
public class WxOpenIdInfo
{
public string WxopenId { get; set; }//用戶(hù)存放微信用戶(hù)的openId
}
然後再建立使用者資訊的基本類(lèi)別
/// <summary>
/// 微信用戶(hù)基本信息類(lèi)
/// </summary>
public class WxUserInfo
{
public int subscribe { get; set; }//關(guān)注狀態(tài)
public string openid { get; set; }//OpenID
public string nickname { get; set; }//昵稱(chēng)
public string sex { get; set; }//性別
public string city { get; set; }//城市
public string province { get; set; }//省份
public string headimgurl { get; set; }//頭像圖片地址
public string subscribe_time { get; set; }//關(guān)注時(shí)間
public string remark { get; set; }//備注
public string groupid { get; set; }//分組ID
}
?使用者清單前臺(tái)代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WeiXinUserList.aspx.cs" Inherits="DQWebSite.Administrator.WeiXinUserList" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link href="css/style.css" rel="Stylesheet" type="text/css" />
<style type="text/css">
#title {width:100%; height:40px;margin-top:10px; text-indent:5px; line-height:40px;}
.checkstyle { float:left;}
#DDlAddgroups { text-align:center; width:161px; border:1px solid #d9d9d9; border-radius:5px; height:35px; line-height:35px; font-weight:bold; text-align:center; float:left; margin:auto 5px auto 5px;}
.DDlAddgroups{ text-align:center; width:161px; border:1px solid #d9d9d9; border-radius:5px; height:35px; line-height:35px; font-weight:bold; text-align:center; float:left; margin:auto 5px auto 5px;}
#DDLgroups { text-align:center; width:111px; border:1px solid #d9d9d9; border-radius:5px; height:35px; line-height:35px; font-weight:bold; text-align:center; float:left; margin:auto 5px auto 5px;}
.newGroups { margin:auto 5px auto 5px;}
.inputstyle { height:35px; line-height:35px; text-indent:5px; width:280px;background-image:url('images/inputbg.gif'); background-repeat:repeat-x;border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; float:left; margin:auto 5px auto 5px;
}
.wxusertab { border:1px solid #d9d9d9; width:100%; text-align:left; text-indent:5px;
}
th { height:35px;background-image:url('images/th.gif'); background-repeat:repeat-x;
}
td {
border-bottom:1px solid #d9d9d9;
}
.trcolor { background-color:#ecd9df;
}
tr:hover { cursor:pointer;
}
#FenPage { width:1124px; height:25px; line-height:25px; text-align:center; margin:20px auto 20px auto;
}
.linka { color:#0094ff; cursor:pointer;
}
.fenyebtn {width:60px; height:25px; border:1px solid #ced9df; border-radius:5px; text-align:center; line-height:25px; float:right;
}
.fenyebtn2 { width:60px; height:25px; border:1px solid #ced9df; border-radius:5px; text-align:center; line-height:25px;margin-left:10px;float:right;
}
.toPageIndex { width:60px;height:25px; background-image:url('images/inputbg.gif'); margin-left:10px; background-repeat:repeat-x;border-top:solid 1px #a7b5bc; border-left:solid 1px #a7b5bc; border-right:solid 1px #ced9df; border-bottom:solid 1px #ced9df; text-align:center; float:right;
}
.gotoPagebtn { width:60px; height:25px; border:1px solid #ced9df; border-radius:5px; text-align:center; line-height:25px;margin-left:10px;float:right; background-color:#ced9df;
}
.deletebtn {float:left;width:100px; color:#000; height:25px; background-color:#ced9df; border:1px solid #ced9df; border-radius:5px; text-align:center;
}
a { color:#08a5e0;
}
.droplist { background-image:url('images/inputbg.gif'); background-repeat:repeat-x; width:120px; height:25px; border:1px solid #ced9df;
}
.checkstyle { float:left;
}
.imgheadstyle { width:50px; height:50px; margin-top:10px;
}
.lbsubscribeCount { font-size:26px;
}
#shownewgroup { width:300px; height:200px; background-color:white;z-index:9999; border:2px solid #DDD; top:40%; left:40%; background-color:#fff; position:fixed;margin:-100px auto auto -100px; display:none;
}
#shownewgroupzhezhaoceng { height:200%; width:200%; left:0px; top:0px;position:fixed; z-index:9998; background:rgb(50,50,50);background:rgba(0,0,0,0.5); display:none;
}
.closeLogin { height:30px; border-bottom:2px solid #31bb34; text-align:right; line-height:30px; font-size:14px; font-weight:bold;
}
a:hover { cursor:pointer;
}
#updateremark { width:300px; height:200px; background-color:white;z-index:9999; border:2px solid #DDD; top:40%; left:40%; background-color:#fff; position:fixed;margin:-100px auto auto -100px; display:none;
}
#updateremark_zhezhaoceng { height:100%; width:100%; left:0px; top:0px;position:fixed; z-index:9998; background:rgb(50,50,50);background:rgba(0,0,0,0.5); display:none;
}
</style>
<script src="../js/jquery-1.7.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$(".newGroups").click(function () {
$("#shownewgroupzhezhaoceng").show();
$("#shownewgroup").show();
}),
$('.closeloginpage').click(function () {
$("#shownewgroupzhezhaoceng").hide();
$("#shownewgroup").hide();
})
})
</script>
</head>
<body>
<form id="form1" runat="server">
<p class="place">
<span>位置:</span>
<ul class="placeul">
<li><a href="WelCome.aspx" target="rightFrame">首頁(yè)</a></li>
<li>微信管理</li>
<li>德橋員工服務(wù)中心--關(guān)注者列表管理</li>
</ul>
</p>
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<p id="shownewgroup">
<p class="closeLogin"><a class="closeloginpage"><span style="float:left; color:#08a5e0; font-size:18px; text-indent:5px;">新建分組</span>關(guān)閉</a> </p>
<p style="font-size:12px; height:40px; color:red; line-height:40px;"> 30字符以?xún)?nèi)</p>
<input type="text" id="txtgroupsName" name="txtgroupsName" class="inputstyle" maxlength="30" runat="server" value="分組名稱(chēng)" onfocus="if(value==defaultValue){value='';this.style.color='#000'}" onblur="if(!value){value=defaultValue;this.style.color='#999'}" style="color:#999"/>
<asp:LinkButton ID="LinkBtnCreateGroup" runat="server" OnClick="LinkBtnCreateGroup_Click"><p style="background-image:url('images/buttonbg.png'); width:111px; height:35px; line-height:35px; font-weight:bold;float:left; margin-top:20px; margin-left:5px; text-align:center;color:#fff;"> 確定創(chuàng)建</p></asp:LinkButton>
</p>
<p id="shownewgroupzhezhaoceng"></p>
<p style=" border-bottom:2px solid #31bb34; height:30px; margin-top:10px; text-indent:10px; font-size:22px; line-height:30px; width:100%;"><span style="float:left; font-size:16px;">已關(guān)注人數(shù)</span><span style="color:red;"><asp:Label ID="lbsubscribeCount" CssClass="lbsubscribeCount" runat="server" Text="Label"></asp:Label> </span></p>
<p id="title">
<asp:CheckBox ID="CheckAll" runat="server" CssClass="checkstyle" OnCheckedChanged="CheckAll_CheckedChanged" /><span style="float:left;">全選 </span>
<asp:DropDownList ID="DDlAddgroups" CssClass="DDlAddgroups" runat="server" OnSelectedIndexChanged="DDlAddgroups_SelectedIndexChanged">
</asp:DropDownList>
<asp:DropDownList ID="DDLgroups" runat="server">
</asp:DropDownList>
<a class="newGroups"><p style="background-image:url('images/buttonbg.png'); width:111px; height:35px; line-height:35px; margin:auto 20px auto 10px; font-weight:bold;float:left; text-align:center;color:#fff;"> + 新建分組</p></a>
<a href="WxGroupManageList.aspx"><p style="background-image:url('images/buttonbg.png'); width:111px; height:35px; line-height:35px; margin:auto 20px auto 10px; font-weight:bold;float:left; text-align:center;color:#fff;">分組管理</p></a>
<a href="WeiXinUserList.aspx"><p style="background-image:url('images/buttonbg.png'); width:111px; height:35px; line-height:35px; margin:auto 20px auto 10px; font-weight:bold;float:left; text-align:center;color:#fff;">刷 新</p></a>
<%-- <input type="text" id="txtName" name="txtName" class="inputstyle" runat="server" value="用戶(hù)昵稱(chēng)" onfocus="if(value==defaultValue){value='';this.style.color='#000'}" onblur="if(!value){value=defaultValue;this.style.color='#999'}" style="color:#999"/>
<asp:LinkButton ID="LinkButton1" runat="server"><p style="background-image:url('images/buttonbg.png'); width:111px; height:35px; line-height:35px; font-weight:bold;float:left; text-align:center;color:#fff;"> 查詢(xún)</p></asp:LinkButton>--%>
</p>
<table class="wxusertab">
<asp:Repeater ID="RepeaterWxUserList" runat="server" OnItemDataBound="RepeaterWxUserList_ItemDataBound">
<HeaderTemplate>
<tr>
<th></th>
<th>OpenID</th>
<th>頭像</th>
<th>昵稱(chēng)(備注名)</th>
<th>關(guān)注時(shí)間</th>
<th>所屬分組</th>
<th>操作</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr style="width:100%; line-height:50px;">
<td style="width:30px;"> <asp:CheckBox ID="CheckIn" runat="server" CssClass="checkstyle" /> <%--OnCheckedChanged="CheckIn_CheckedChanged"--%></td>
<td style="width:150px;"><asp:Label ID="lbwxopenID" runat="server" Text=""></asp:Label>
</td>
<td style="width:80px;"><asp:Image ID="ImgHeadUrl" runat="server" CssClass="imgheadstyle" /> </td>
<td style="width:150px;"><asp:Label ID="lbNickName" runat="server" CssClass="checkstyle" Text=""></asp:Label>
<asp:Label ID="lbRemark" runat="server" Text=""></asp:Label>
</td>
<td style="width:130px;">
<asp:Label ID="lbSubscrine_time" runat="server" Text=""></asp:Label>
</td>
<td style="width:100px;">
<asp:Label ID="lbgroupId" runat="server" CssClass="checkstyle" Visible="false" Text=""></asp:Label>
<asp:DropDownList ID="DDlAddgroupss" Enabled="false" CssClass="DDlAddgroups" runat="server">
<asp:ListItem Value="0">分組名稱(chēng)</asp:ListItem>
</asp:DropDownList>
</td>
<td style="width:110px;">
<a href='UpdateRemarkName.aspx?id=<%# Eval("WxopenId") %>'><p style=" border:1px solid #d9d9d9; border-radius:5px; width:111px; height:35px; line-height:35px; font-weight:bold;float:left; text-align:center;"> 修改備注名稱(chēng)</p></a>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<p id="FenPage">
<asp:LinkButton ID="LinkBtnToPage" CssClass="gotoPagebtn" runat="server" OnClick="LinkBtnToPage_Click">確定</asp:LinkButton>
<asp:TextBox ID="txtPageIndex" CssClass="toPageIndex" runat="server"></asp:TextBox>
<asp:HyperLink ID="lnkLast" runat="server"><span class="fenyebtn2">>>|</span></asp:HyperLink>
<asp:HyperLink ID="lnkNext" runat="server"><span class="fenyebtn2">></span></asp:HyperLink>
<asp:HyperLink ID="lnkTop" runat="server"><span class="fenyebtn2"><</span></asp:HyperLink>
<asp:HyperLink ID="lnkFist" runat="server"><span class="fenyebtn">|<<</span></asp:HyperLink>
<span style="float:left;">當(dāng)前第</span>
<span style="float:left; color:red;"><asp:Label ID="lbPageIndex" runat="server" Text=""></asp:Label></span>
<span style="float:left;margin-left:5px;">頁(yè)/</span>
<span style="float:left;margin-left:5px;">共</span>
<span style="float:left;color:red;"><asp:Label ID="lbCountPage" runat="server" Text=""></asp:Label></span>
<span style="float:left;margin-left:5px;">頁(yè)</span>
<span style="float:left;margin-left:10px;"><asp:Label ID="lbPageSize" runat="server" Text=""></asp:Label></span>
<span style="float:left;margin-left:10px;">共搜索到 </span>
<span style="float:left;margin-left:5px; color:red;"><asp:Label ID="lbCountData" runat="server" Text=""></asp:Label></span>
<span style="float:left;margin-left:5px;">條記錄.</span>
</p>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
取得使用者清單綁定使用者資訊的後臺(tái)程式碼,已包含,修改備註名,將使用者移至分組,新分組代碼

分組統(tǒng)計(jì),用於顯示每個(gè)分組的已存在人數(shù),無(wú)其他作用
上碼:
PagedDataSource pds = new PagedDataSource();
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
BindGroupList();
BindGetAllUserOpenIdList();
this.DataBind();
this.CheckAll.AutoPostBack = true;
this.DDlAddgroups.AutoPostBack = true;
}
//this.DDlAddgroups.Enabled = false;
}
/// <summary>
/// 獲取所有用戶(hù)的openId列表
/// </summary>
private void BindGetAllUserOpenIdList()
{
WeiXinServer wxs = new WeiXinServer();
///從緩存讀取accesstoken
string Access_token = Cache["Access_token"] as string;
if (Access_token == null)
{
//如果為空,重新獲取
Access_token = wxs.GetAccessToken();
//設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
}
string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);
string jsonres = "";
string content = Cache["AllUserOpenList_content"] as string;
if (content == null)
{
jsonres = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + Access_tokento;
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);
myRequest.Method = "GET";
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
content = reader.ReadToEnd();
reader.Close();
//設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
Cache.Insert("AllUserOpenList_content", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
}
//使用前需要引用Newtonsoft.json.dll文件
JObject jsonObj = JObject.Parse(content);
int totalnum = int.Parse(jsonObj["count"].ToString());
List<WxOpenIdInfo> openidlist = new List<WxOpenIdInfo>();
for (int i = 0; i < totalnum;i++ )
{
WxOpenIdInfo wxopeninfo = new WxOpenIdInfo();
wxopeninfo.WxopenId = jsonObj["data"]["openid"][i].ToString();
openidlist.Add(wxopeninfo);
}
pds.DataSource = openidlist;
pds.AllowPaging = true;
pds.PageSize = 20;//每頁(yè)顯示為20條
int CurrentPage;
if (!String.IsNullOrWhiteSpace(this.txtPageIndex.Text.ToString().Trim()))
{
CurrentPage = Convert.ToInt32(this.txtPageIndex.Text.ToString().Trim());
}
else if (Request.QueryString["Page"] != null)
{
CurrentPage = Convert.ToInt32(Request.QueryString["Page"]);
}
else
{
CurrentPage = 1;
}
pds.CurrentPageIndex = CurrentPage - 1;//當(dāng)前頁(yè)的索引就等于當(dāng)前頁(yè)碼-1;
if (!pds.IsFirstPage)
{
//Request.CurrentExecutionFilePath 為當(dāng)前請(qǐng)求的虛擬路徑
this.lnkTop.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurrentPage - 1);
this.lnkFist.Enabled = this.lnkTop.Enabled = true;
this.lnkNext.Enabled = this.lnkLast.Enabled = true;
}
else
{
this.lnkFist.Enabled = this.lnkTop.Enabled = false;
this.lnkNext.Enabled = this.lnkLast.Enabled = true;
this.lnkFist.Attributes.Add("style", "color:#ced9df;");
this.lnkTop.Attributes.Add("style", "color:#ced9df;");
this.lnkNext.Attributes.Remove("style");
this.lnkLast.Attributes.Remove("style");
}
if (!pds.IsLastPage)
{
//Request.CurrentExecutionFilePath 為當(dāng)前請(qǐng)求的虛擬路徑
this.lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurrentPage + 1);
this.lnkFist.Enabled = this.lnkTop.Enabled = true;
this.lnkNext.Enabled = this.lnkLast.Enabled = true;
}
else
{
this.lnkNext.Enabled = this.lnkLast.Enabled = false;
this.lnkFist.Enabled = this.lnkTop.Enabled = true;
this.lnkNext.Attributes.Add("style", "color:#ced9df;");
this.lnkLast.Attributes.Add("style", "color:#ced9df;");
this.lnkFist.Attributes.Remove("style");
this.lnkTop.Attributes.Remove("style");
}
this.lnkFist.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(1);//跳轉(zhuǎn)至首頁(yè)
this.lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(pds.PageCount);//跳轉(zhuǎn)至末頁(yè)
this.RepeaterWxUserList.DataSource = pds;
this.RepeaterWxUserList.DataBind();
this.lbCountData.Text = openidlist.Count.ToString();
this.lbPageIndex.Text = (pds.CurrentPageIndex + 1).ToString();
this.lbPageSize.Text = "每頁(yè)" + pds.PageSize.ToString() + "條記錄";
this.lbCountPage.Text = pds.PageCount.ToString();
this.txtPageIndex.Text = (pds.CurrentPageIndex + 1).ToString();
if (int.Parse(openidlist.Count.ToString()) <= int.Parse(pds.PageSize.ToString()))
{
this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = false;
}
else
{
this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = true;
}
this.lbsubscribeCount.Text = openidlist.Count.ToString();
}
/// <summary>
/// 綁定分組列表
/// </summary>
private void BindGroupList()
{
WeiXinServer wxs = new WeiXinServer();
///從緩存讀取accesstoken
string Access_token = Cache["Access_token"] as string;
if (Access_token == null)
{
//如果為空,重新獲取
Access_token = wxs.GetAccessToken();
//設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
}
string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);
string jsonres = "";
string content = Cache["AllGroups_content"] as string;
if (content == null)
{
jsonres = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token=" + Access_tokento;
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);
myRequest.Method = "GET";
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
content = reader.ReadToEnd();
reader.Close();
//設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
Cache.Insert("AllGroups_content", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
}
//使用前需要引用Newtonsoft.json.dll文件
JObject jsonObj = JObject.Parse(content);
int groupsnum = jsonObj["groups"].Count();
this.DDLgroups.Items.Clear();//清除
this.DDlAddgroups.Items.Clear();
this.DDLgroups.Items.Insert(0, new ListItem("分組統(tǒng)計(jì)", "0"));//添加默認(rèn)第一個(gè)提示
this.DDlAddgroups.Items.Insert(0, new ListItem("移動(dòng)用戶(hù)到分組", "0"));
for (int i = 0; i < groupsnum; i++)
{
this.DDLgroups.Items.Add(new ListItem(jsonObj["groups"][i]["name"].ToString() + "(" + jsonObj["groups"][i]["count"].ToString() + ")", jsonObj["groups"][i]["id"].ToString()));
this.DDlAddgroups.Items.Add(new ListItem(jsonObj["groups"][i]["name"].ToString(), jsonObj["groups"][i]["id"].ToString()));
}
}
/// <summary>
/// 輸入頁(yè)碼提交跳轉(zhuǎn)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkBtnToPage_Click(object sender, EventArgs e)
{
if (String.IsNullOrWhiteSpace(this.txtPageIndex.Text.ToString().Trim()))
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('頁(yè)碼不能為空!')", true);
this.txtPageIndex.Focus();
return;
}
if (IsNum(this.txtPageIndex.Text.ToString().Trim()))
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('頁(yè)碼數(shù)只能輸入數(shù)字!')", 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('所輸頁(yè)數(shù)不能大于總頁(yè)數(shù)!')", true);
this.txtPageIndex.Focus();
this.txtPageIndex.Text = this.lbPageIndex.Text.ToString();
return;
}
BindGetAllUserOpenIdList();
}
/// <summary>
/// 判斷是否是數(shù)字
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static bool IsNum(string text) //
{
for (int i = 0; i < text.Length; i++)
{
if (!Char.IsNumber(text, i))
{
return true; //輸入的不是數(shù)字
}
}
return false; //否則是數(shù)字
}
/// <summary>
/// 綁定用戶(hù)基本信息事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void RepeaterWxUserList_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//CheckBox checkIn = e.Item.FindControl("CheckIn") as CheckBox;
//checkIn.AutoPostBack = true;
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
WxOpenIdInfo wxopen = e.Item.DataItem as WxOpenIdInfo;
Label lbwxopenID = e.Item.FindControl("lbwxopenID") as Label;
lbwxopenID.Text = wxopen.WxopenId.ToString();
//根據(jù)OpenID獲取用戶(hù)基本信息。緩存處理
WeiXinServer wxs = new WeiXinServer();
///從緩存讀取accesstoken
string Access_token = Cache["Access_token"] as string;
if (Access_token == null)
{
//如果為空,重新獲取
Access_token = wxs.GetAccessToken();
//設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
}
string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);
string jsonres ="https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + Access_tokento + "&openid=" + lbwxopenID.Text.ToString();
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);
myRequest.Method = "GET";
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
//使用前需要引用Newtonsoft.json.dll文件
JObject jsonObj = JObject.Parse(content);
Image ImgHeadUrl = e.Item.FindControl("ImgHeadUrl") as Image;
Label lbNickName = e.Item.FindControl("lbNickName") as Label;
Label lbRemark = e.Item.FindControl("lbRemark") as Label;
Label lbSubscrine_time = e.Item.FindControl("lbSubscrine_time") as Label;
Label lbgroupId = e.Item.FindControl("lbgroupId") as Label;
DropDownList DDlAddgroupss = e.Item.FindControl("DDlAddgroupss") as DropDownList;
lbNickName.Text = jsonObj["nickname"].ToString();
if (!String.IsNullOrWhiteSpace(jsonObj["remark"].ToString()))
{
lbRemark.Text = "(" + jsonObj["remark"].ToString() + ")";
}
ImgHeadUrl.ImageUrl = jsonObj["headimgurl"].ToString();
lbgroupId.Text = jsonObj["groupid"].ToString();
//獲取關(guān)注時(shí)間
int totaltiem = int.Parse(jsonObj["subscribe_time"].ToString());
//將整型格式時(shí)間轉(zhuǎn)換為時(shí)間格式
DateTime t = new DateTime(1970, 1, 1).AddSeconds(totaltiem);
//轉(zhuǎn)換后的時(shí)間會(huì)比原有時(shí)間小8個(gè)小時(shí),因此需要加上8個(gè)小時(shí)
lbSubscrine_time.Text = t.AddHours(8).ToString();
string jjjjjjjjjddd = Cache["AllGroups_content"] as string;
if (jjjjjjjjjddd == null)
{
jsonres = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token=" + Access_tokento;
HttpWebRequest myRequestss = (HttpWebRequest)WebRequest.Create(jsonres);
myRequest.Method = "GET";
HttpWebResponse myResponsess = (HttpWebResponse)myRequest.GetResponse();
StreamReader readerss = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
jjjjjjjjjddd = reader.ReadToEnd();
reader.Close();
//設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
Cache.Insert("AllGroups_content", jjjjjjjjjddd, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
}
//使用前需要引用Newtonsoft.json.dll文件
JObject jsonObjss = JObject.Parse(jjjjjjjjjddd);
int groupsnumss = jsonObjss["groups"].Count();
for (int i = 0; i < groupsnumss;i++ )
{
if (jsonObjss["groups"][i]["id"].ToString().Equals(lbgroupId.Text.ToString()))
{
DDlAddgroupss.SelectedItem.Text = jsonObjss["groups"][i]["name"].ToString();
}
}
}
}
/// <summary>
/// 創(chuàng)建分組
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkBtnCreateGroup_Click(object sender, EventArgs e)
{
if (this.txtgroupsName.Value.ToString().Equals("分組名稱(chēng)"))
{
////
ScriptManager.RegisterClientScriptBlock(this.Page,this.GetType(),"","alert('不能為空!')",true);
this.txtgroupsName.Focus();
return;
}
WeiXinServer wxs = new WeiXinServer();
string res = "";
///從緩存讀取accesstoken
string Access_token = Cache["Access_token"] as string;
if (Access_token == null)
{
//如果為空,重新獲取
Access_token = wxs.GetAccessToken();
//設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
}
string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);
string posturl = "https://api.weixin.qq.com/cgi-bin/groups/create?access_token=" + Access_tokento;
//string postData = "{\"group\":{\"name\":\""+this.txtgroupsName.Value.ToString().Trim()+"\"}}";
string postData = "{\"group\":{\"name\":\""+this.txtgroupsName.Value.ToString().Trim()+"\"}}";
res = wxs.GetPage(posturl, postData);
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('創(chuàng)建成功!如未顯示,請(qǐng)退出重新登錄即可!');location='WeiXinUserList.aspx';", true);
}
/// <summary>
/// 全選、全不選
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void CheckAll_CheckedChanged(object sender, EventArgs e)
{
CheckBox checkAll = (CheckBox)sender;
foreach (RepeaterItem item in this.RepeaterWxUserList.Items)
{
CheckBox checkIn = (CheckBox)item.FindControl("CheckIn");
checkIn.Checked = checkAll.Checked;
}
}
/// <summary>
/// 移動(dòng)用戶(hù)到分組
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void DDlAddgroups_SelectedIndexChanged(object sender, EventArgs e)
{
///取得分組ID
string groupId = this.DDlAddgroups.SelectedValue.ToString();
//this.Label1.Text = groupId.ToString();
Boolean bools = false;
foreach (RepeaterItem item in this.RepeaterWxUserList.Items)
{
CheckBox checkIn = (CheckBox)item.FindControl("CheckIn");
if (checkIn.Checked)
{
bools = true;
Label lbwxopenID = item.FindControl("lbwxopenID") as Label;
WeiXinServer wxs = new WeiXinServer();
string res = "";
///從緩存讀取accesstoken
string Access_token = Cache["Access_token"] as string;
if (Access_token == null)
{
//如果為空,重新獲取
Access_token = wxs.GetAccessToken();
//設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
}
string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);
string posturl = "https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token=" + Access_tokento;
//POST數(shù)據(jù)例子:{"openid":"oDF3iYx0ro3_7jD4HFRDfrjdCM58","to_groupid":108}
//string postData = "{\"openid\":\"" + openid.ToString().Trim() + "\",\"remark\":\"" + this.txtRemarkName.Value.ToString() + "\"}";
string postData = "{\"openid\":\"" + lbwxopenID.Text.ToString() + "\",\"to_groupid\":\"" + groupId.ToString() + "\"}";
res = wxs.GetPage(posturl, postData);
//使用前需要引用Newtonsoft.json.dll文件
JObject jsonObj = JObject.Parse(res);
///獲取返回結(jié)果的正確|true|false,
string isright = jsonObj["errcode"].ToString();//0
string istrueorfalse = jsonObj["errmsg"].ToString();//ok
if (isright.Equals("0") && istrueorfalse.Equals("ok"))
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('移動(dòng)用戶(hù)成功!');location='WeiXinUserList.aspx';", true);
}
else
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('移動(dòng)用戶(hù)失??!');", true);
return;
}
}
}
if (!bools)
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('未選中項(xiàng)!');location='WeiXinUserList.aspx';", true);
return;
}
}
?WeiXinServer wxs = new WeiXinServer();是單獨(dú)建立的一個(gè)類(lèi),主要用來(lái)取得通行證和載入流的方法,程式碼如下:
/// <summary>
/// 微信服務(wù)類(lèi)
/// </summary>
public class WeiXinServer
{
/// <summary>
/// 獲取通行證
/// </summary>
/// <returns></returns>
public string GetAccessToken()
{
string url_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=此處應(yīng)該填寫(xiě)公眾的appid&secret=此處應(yīng)該填寫(xiě)公眾號(hào)的secret";
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url_token);
myRequest.Method = "GET";
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
return content;
}
public string GetPage(string p, string postData)
{
Stream outstream = null;
Stream instream = null;
StreamReader sr = null;
HttpWebResponse response = null;
HttpWebRequest request = null;
Encoding encoding = Encoding.UTF8;
byte[] data = encoding.GetBytes(postData);
// 準(zhǔn)備請(qǐng)求...
try
{
// 設(shè)置參數(shù)
request = WebRequest.Create(p) as HttpWebRequest;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
//發(fā)送請(qǐng)求并獲取相應(yīng)回應(yīng)數(shù)據(jù)
response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才開(kāi)始向目標(biāo)網(wǎng)頁(yè)發(fā)送Post請(qǐng)求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回結(jié)果網(wǎng)頁(yè)(html)代碼
string content = sr.ReadToEnd();
string err = string.Empty;
return content;
}
catch (Exception ex)
{
string err = ex.Message;
return string.Empty;
}
}
}
修改備註頁(yè)面的程式碼:
protected void Page_Load(object sender, EventArgs e)
{
if(Request.QueryString["id"]!=null)
{
String openid = Request.QueryString["id"].ToString();
this.txtOpenId.Value = openid.ToString();
//根據(jù)OpenID獲取用戶(hù)基本信息。緩存處理
WeiXinServer wxs = new WeiXinServer();
///從緩存讀取accesstoken
string Access_token = Cache["Access_token"] as string;
if (Access_token == null)
{
//如果為空,重新獲取
Access_token = wxs.GetAccessToken();
//設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
}
string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);
string jsonres = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + Access_tokento + "&openid=" + openid;
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres);
myRequest.Method = "GET";
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
//使用前需要引用Newtonsoft.json.dll文件
JObject jsonObj = JObject.Parse(content);
//假如備注名不為空,給備注名文本框賦值,顯示原有的備注名
if (!String.IsNullOrWhiteSpace(jsonObj["remark"].ToString()))
{
this.txtRemarkName.Value = jsonObj["remark"].ToString();
}
}
}
/// <summary>
/// 設(shè)置備注名
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void LinkBtnSet_Click(object sender, EventArgs e)
{
String openid = Request.QueryString["id"].ToString();
WeiXinServer wxs = new WeiXinServer();
string res = "";
///從緩存讀取accesstoken
string Access_token = Cache["Access_token"] as string;
if (Access_token == null)
{
//如果為空,重新獲取
Access_token = wxs.GetAccessToken();
//設(shè)置緩存的數(shù)據(jù)7000秒后過(guò)期
Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration);
}
string Access_tokento = Access_token.Substring(17, Access_token.Length - 37);
string posturl = "https://api.weixin.qq.com/cgi-bin/user/info/updateremark?access_token=" + Access_tokento;
string postData = "{\"openid\":\"" + openid.ToString().Trim() + "\",\"remark\":\"" + this.txtRemarkName.Value.ToString() + "\"}";
res = wxs.GetPage(posturl, postData);
//使用前需藥引用Newtonsoft.json.dll文件
JObject jsonObj = JObject.Parse(res);
///獲取返回結(jié)果的正確|true|false,
string isright = jsonObj["errcode"].ToString();//0
string istrueorfalse = jsonObj["errmsg"].ToString();//ok
if (isright.Equals("0") && istrueorfalse.Equals("ok"))
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('修改備注成功!');location='WeiXinUserList.aspx';", true);
}
else
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('修改備注失敗!');", true);
}
}
#
以上是asp.net微信開(kāi)發(fā)已關(guān)注用戶(hù)管理步驟詳解的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!
本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn
PHP微信開(kāi)發(fā):如何實(shí)作訊息加密解密
May 13, 2023 am 11:40 AM
PHP是一種開(kāi)源的腳本語(yǔ)言,廣泛應(yīng)用於網(wǎng)頁(yè)開(kāi)發(fā)和伺服器端編程,尤其在微信開(kāi)發(fā)中得到了廣泛的應(yīng)用。如今,越來(lái)越多的企業(yè)和開(kāi)發(fā)者開(kāi)始使用PHP進(jìn)行微信開(kāi)發(fā),因?yàn)樗蔀榱苏嬲囊讓W(xué)易用的開(kāi)發(fā)語(yǔ)言。在微信開(kāi)發(fā)中,訊息的加密和解密是一個(gè)非常重要的問(wèn)題,因?yàn)樗鼈兩婕百Y料的安全性。對(duì)於沒(méi)有加密和解密方式的消息,駭客可以輕鬆取得其中的數(shù)據(jù),對(duì)用戶(hù)造成威脅
PHP微信開(kāi)發(fā):如何實(shí)現(xiàn)投票功能
May 14, 2023 am 11:21 AM
在微信公眾號(hào)開(kāi)發(fā)中,投票功能經(jīng)常被運(yùn)用。投票功能是讓使用者快速參與互動(dòng)的好方式,也是舉辦活動(dòng)和調(diào)查意見(jiàn)的重要工具。本文將為您介紹如何使用PHP實(shí)作微信投票功能。在取得微信公眾號(hào)授權(quán)首先,你需要取得微信公眾號(hào)的授權(quán)。在微信公眾平臺(tái)上,你需要設(shè)定微信公眾號(hào)碼的api地址、官方帳號(hào)和公眾號(hào)碼對(duì)應(yīng)的token。在我們使用PHP語(yǔ)言開(kāi)發(fā)的過(guò)程中,我們需要使用微信官方提供的PH
用PHP開(kāi)發(fā)微信群發(fā)工具
May 13, 2023 pm 05:00 PM
隨著微信的普及,越來(lái)越多的企業(yè)開(kāi)始將其作為行銷(xiāo)工具。而微信群發(fā)功能,則是企業(yè)進(jìn)行微信行銷(xiāo)的重要手段之一。但是,如果只依靠手動(dòng)發(fā)送,對(duì)於行銷(xiāo)人員來(lái)說(shuō)是一件極為費(fèi)時(shí)費(fèi)力的工作。所以,開(kāi)發(fā)一款微信群發(fā)工具就顯得格外重要。本文將介紹如何使用PHP開(kāi)發(fā)微信群發(fā)工具。一、準(zhǔn)備工作開(kāi)發(fā)微信群發(fā)工具,我們需要掌握以下幾個(gè)技術(shù)點(diǎn):PHP基礎(chǔ)知識(shí)微信公眾平臺(tái)開(kāi)發(fā)開(kāi)發(fā)工具:Sub
PHP微信開(kāi)發(fā):如何實(shí)現(xiàn)客服聊天視窗管理
May 13, 2023 pm 05:51 PM
微信是目前全球用戶(hù)規(guī)模最大的社群平臺(tái)之一,隨著行動(dòng)網(wǎng)路的普及,越來(lái)越多的企業(yè)開(kāi)始意識(shí)到微信行銷(xiāo)的重要性。在進(jìn)行微信行銷(xiāo)時(shí),客服服務(wù)是至關(guān)重要的一環(huán)。為了更好地管理客服聊天窗口,我們可以藉助PHP語(yǔ)言進(jìn)行微信開(kāi)發(fā)。一、PHP微信開(kāi)發(fā)簡(jiǎn)介PHP是一種開(kāi)源的伺服器端腳本語(yǔ)言,廣泛用於Web開(kāi)發(fā)領(lǐng)域。結(jié)合微信公眾平臺(tái)提供的開(kāi)發(fā)接口,我們可以使用PHP語(yǔ)言進(jìn)行微信
PHP微信開(kāi)發(fā):如何實(shí)現(xiàn)使用者標(biāo)籤管理
May 13, 2023 pm 04:31 PM
在微信公眾號(hào)開(kāi)發(fā)中,使用者標(biāo)籤管理是一個(gè)非常重要的功能,可以讓開(kāi)發(fā)者更了解和管理自己的使用者。本篇文章將介紹如何使用PHP實(shí)作微信使用者標(biāo)籤管理功能。一、取得微信用戶(hù)openid在使用微信用戶(hù)標(biāo)籤管理功能之前,我們首先需要取得用戶(hù)的openid。在微信公眾號(hào)開(kāi)發(fā)中,透過(guò)使用者授權(quán)的方式取得openid是比較常見(jiàn)的做法。在使用者授權(quán)完成後,我們可以透過(guò)以下程式碼取得用
PHP微信開(kāi)發(fā):如何實(shí)作群發(fā)訊息傳送記錄
May 13, 2023 pm 04:31 PM
隨著微信成為了人們生活中越來(lái)越重要的通訊工具,其敏捷的訊息傳遞功能迅速受到廣大企業(yè)和個(gè)人的青睞。對(duì)企業(yè)而言,將微信發(fā)展為一個(gè)行銷(xiāo)平臺(tái)已經(jīng)成為趨勢(shì),而微信開(kāi)發(fā)的重要性也逐漸凸顯。在其中,群發(fā)功能更是被廣泛使用,那麼,作為PHP程式設(shè)計(jì)師,如何實(shí)現(xiàn)群發(fā)訊息發(fā)送記錄呢?以下將為大家簡(jiǎn)單介紹一下。 1.了解微信公眾號(hào)相關(guān)開(kāi)發(fā)知識(shí)在了解如何實(shí)現(xiàn)群發(fā)訊息發(fā)送記錄之前,我
使用PHP實(shí)現(xiàn)微信公眾號(hào)開(kāi)發(fā)的步驟
Jun 27, 2023 pm 12:26 PM
如何使用PHP實(shí)現(xiàn)微信公眾號(hào)開(kāi)發(fā)微信公眾號(hào)已經(jīng)成為了許多企業(yè)推廣和互動(dòng)的重要管道,而PHP作為常用的Web語(yǔ)言,也可以用來(lái)進(jìn)行微信公眾號(hào)的開(kāi)發(fā)。本文將介紹使用PHP實(shí)現(xiàn)微信公眾號(hào)開(kāi)發(fā)的具體步驟。第一步:取得微信公眾號(hào)的開(kāi)發(fā)者帳號(hào)在開(kāi)始微信公眾號(hào)開(kāi)發(fā)之前,需要先去申請(qǐng)一個(gè)微信公眾號(hào)的開(kāi)發(fā)者帳號(hào)。具體的註冊(cè)流程可參考微信公眾平臺(tái)的官方網(wǎng)
如何使用PHP進(jìn)行微信開(kāi)發(fā)?
May 21, 2023 am 08:37 AM
隨著網(wǎng)路和行動(dòng)智慧型裝置的發(fā)展,微信成為了社交和行銷(xiāo)領(lǐng)域不可或缺的一部分。在這個(gè)越來(lái)越數(shù)位化的時(shí)代,如何使用PHP進(jìn)行微信開(kāi)發(fā)已經(jīng)成為了許多開(kāi)發(fā)者的關(guān)注點(diǎn)。本文主要介紹如何使用PHP進(jìn)行微信發(fā)展的相關(guān)知識(shí)點(diǎn),以及其中的一些技巧和注意事項(xiàng)。一、開(kāi)發(fā)環(huán)境準(zhǔn)備在進(jìn)行微信開(kāi)發(fā)之前,首先需要準(zhǔn)備好對(duì)應(yīng)的開(kāi)發(fā)環(huán)境。具體來(lái)說(shuō),需要安裝PHP的運(yùn)作環(huán)境,以及微信公眾平臺(tái)提
See all articles