Cet article présente principalement le contenu connexe de la gestion des utilisateurs dans le développement asp.net WeChat. Les amis dans le besoin peuvent se référer au
Description de la demande d'appel d'interfaceMéthode de demande http : GET (veuillez utiliser le protocole https) Description du retour Renvoie le paquet Renvoie le paquet JSON lorsqu'il est incorrect (l'exemple est une erreur AppID invalide) : {" code d'erreur" :40013,"errmsg":"appid invalide">Pièce jointe : Lorsque le nombre de followers dépasse 10 000
suivant Valeur _openid, afin que la liste puisse être extraite plusieurs fois pour répondre aux besoins.
Plus précisément, lors de l'appel de l'interface, la valeur next_openid renvoyée par l'appel précédent est utilisée comme valeur next_openid dans l'appel suivant. L'exemple est le suivant : Le compte public A compte 23 000 abonnés. Si vous souhaitez obtenir tous les abonnés via l'interface pull follow, alors les URL de requête respectives sont les suivantes :https:// api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN
Retour des résultats :
{ "total":23000, "count":10000, "data":{" openid":[ "OPENID1", "OPENID2", ..., "OPENID10000" ] }, "next_openid":"OPENID10000" }
Retour des résultats :
{ "total":23000, "count":10000, "data":{ "openid":[ "OPENID10001", "OPENID10002", ..., "OPENID20000" ] }, "next_openid":"OPENID20000" }
Retour résultats (liste des abonnés Lorsque le retour est terminé, le next_openid renvoyé est vide) :
{ "total":23000, "count":3000, "data":{" "openid":[ "OPENID20001", "OPENID20002", ..., "OPENID23000" ] }, "next_openid":"OPENID23000" }
obtenir la liste des utilisateurs peut être obtenue 500 fois et les informations de base de l'utilisateur peuvent être obtenues 500 000 fois, donc ensuite, lorsque j'obtiendrai la liste des utilisateurs, je le ferai utilisez le cache, ne le regardez pas 500 fois c'est beaucoup, mais c'est vraiment rapide à utiliser Les rendus sont les suivants :
Créer une classe pour stocker les openIds
.
public class WxOpenIdInfo { public string WxopenId { get; set; }//用户存放微信用户的openId }
/// <summary> /// 微信用户基本信息类 /// </summary> public class WxUserInfo { public int subscribe { get; set; }//关注状态 public string openid { get; set; }//OpenID public string nickname { get; set; }//昵称 public string sex { get; set; }//性别 public string city { get; set; }//城市 public string province { get; set; }//省份 public string headimgurl { get; set; }//头像图片地址 public string subscribe_time { get; set; }//关注时间 public string remark { get; set; }//备注 public string groupid { get; set; }//分组ID }
Code frontal de la liste des utilisateurs
<%@ 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">首页</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字符以内</p> <input type="text" id="txtgroupsName" name="txtgroupsName" class="inputstyle" maxlength="30" runat="server" value="分组名称" onfocus="if(value==defaultValue){value='';this.style.color='#000'}" onblur="if(!value){value=defaultValue;this.style.color='#999'}" style="color:#999"/> <asp:LinkButton ID="LinkBtnCreateGroup" runat="server" OnClick="LinkBtnCreateGroup_Click"><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;"> 确定创建</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;">已关注人数</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="用户昵称" 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;"> 查询</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='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;"> 修改备注名称</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>
Code ci-dessus :
PagedDataSource pds = new PagedDataSource(); protected void Page_Load(object sender, EventArgs e) { if(!Page.IsPostBack) { BindGroupList(); BindGetAllUserOpenIdList(); this.DataBind(); this.CheckAll.AutoPostBack = true; this.DDlAddgroups.AutoPostBack = true; } //this.DDlAddgroups.Enabled = false; } /// <summary> /// 获取所有用户的openId列表 /// </summary> private void BindGetAllUserOpenIdList() { WeiXinServer wxs = new WeiXinServer(); ///从缓存读取accesstoken string Access_token = Cache["Access_token"] as string; if (Access_token == null) { //如果为空,重新获取 Access_token = wxs.GetAccessToken(); //设置缓存的数据7000秒后过期 Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration); } string Access_tokento = Access_token.Substring(17, Access_token.Length - 37); string jsonres = ""; string content = Cache["AllUserOpenList_content"] as string; if (content == null) { jsonres = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + Access_tokento; HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres); myRequest.Method = "GET"; HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); content = reader.ReadToEnd(); reader.Close(); //设置缓存的数据7000秒后过期 Cache.Insert("AllUserOpenList_content", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration); } //使用前需要引用Newtonsoft.json.dll文件 JObject jsonObj = JObject.Parse(content); int totalnum = int.Parse(jsonObj["count"].ToString()); List<WxOpenIdInfo> openidlist = new List<WxOpenIdInfo>(); for (int i = 0; i < totalnum;i++ ) { WxOpenIdInfo wxopeninfo = new WxOpenIdInfo(); wxopeninfo.WxopenId = jsonObj["data"]["openid"][i].ToString(); openidlist.Add(wxopeninfo); } pds.DataSource = openidlist; pds.AllowPaging = true; pds.PageSize = 20;//每页显示为20条 int CurrentPage; if (!String.IsNullOrWhiteSpace(this.txtPageIndex.Text.ToString().Trim())) { CurrentPage = Convert.ToInt32(this.txtPageIndex.Text.ToString().Trim()); } else if (Request.QueryString["Page"] != null) { CurrentPage = Convert.ToInt32(Request.QueryString["Page"]); } else { CurrentPage = 1; } pds.CurrentPageIndex = CurrentPage - 1;//当前页的索引就等于当前页码-1; if (!pds.IsFirstPage) { //Request.CurrentExecutionFilePath 为当前请求的虚拟路径 this.lnkTop.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurrentPage - 1); this.lnkFist.Enabled = this.lnkTop.Enabled = true; this.lnkNext.Enabled = this.lnkLast.Enabled = true; } else { this.lnkFist.Enabled = this.lnkTop.Enabled = false; this.lnkNext.Enabled = this.lnkLast.Enabled = true; this.lnkFist.Attributes.Add("style", "color:#ced9df;"); this.lnkTop.Attributes.Add("style", "color:#ced9df;"); this.lnkNext.Attributes.Remove("style"); this.lnkLast.Attributes.Remove("style"); } if (!pds.IsLastPage) { //Request.CurrentExecutionFilePath 为当前请求的虚拟路径 this.lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurrentPage + 1); this.lnkFist.Enabled = this.lnkTop.Enabled = true; this.lnkNext.Enabled = this.lnkLast.Enabled = true; } else { this.lnkNext.Enabled = this.lnkLast.Enabled = false; this.lnkFist.Enabled = this.lnkTop.Enabled = true; this.lnkNext.Attributes.Add("style", "color:#ced9df;"); this.lnkLast.Attributes.Add("style", "color:#ced9df;"); this.lnkFist.Attributes.Remove("style"); this.lnkTop.Attributes.Remove("style"); } this.lnkFist.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(1);//跳转至首页 this.lnkLast.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(pds.PageCount);//跳转至末页 this.RepeaterWxUserList.DataSource = pds; this.RepeaterWxUserList.DataBind(); this.lbCountData.Text = openidlist.Count.ToString(); this.lbPageIndex.Text = (pds.CurrentPageIndex + 1).ToString(); this.lbPageSize.Text = "每页" + pds.PageSize.ToString() + "条记录"; this.lbCountPage.Text = pds.PageCount.ToString(); this.txtPageIndex.Text = (pds.CurrentPageIndex + 1).ToString(); if (int.Parse(openidlist.Count.ToString()) <= int.Parse(pds.PageSize.ToString())) { this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = false; } else { this.lnkFist.Visible = this.lnkTop.Visible = this.lnkNext.Visible = this.lnkLast.Visible = this.txtPageIndex.Visible = this.LinkBtnToPage.Visible = true; } this.lbsubscribeCount.Text = openidlist.Count.ToString(); } /// <summary> /// 绑定分组列表 /// </summary> private void BindGroupList() { WeiXinServer wxs = new WeiXinServer(); ///从缓存读取accesstoken string Access_token = Cache["Access_token"] as string; if (Access_token == null) { //如果为空,重新获取 Access_token = wxs.GetAccessToken(); //设置缓存的数据7000秒后过期 Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration); } string Access_tokento = Access_token.Substring(17, Access_token.Length - 37); string jsonres = ""; string content = Cache["AllGroups_content"] as string; if (content == null) { jsonres = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token=" + Access_tokento; HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres); myRequest.Method = "GET"; HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); content = reader.ReadToEnd(); reader.Close(); //设置缓存的数据7000秒后过期 Cache.Insert("AllGroups_content", content, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration); } //使用前需要引用Newtonsoft.json.dll文件 JObject jsonObj = JObject.Parse(content); int groupsnum = jsonObj["groups"].Count(); this.DDLgroups.Items.Clear();//清除 this.DDlAddgroups.Items.Clear(); this.DDLgroups.Items.Insert(0, new ListItem("分组统计", "0"));//添加默认第一个提示 this.DDlAddgroups.Items.Insert(0, new ListItem("移动用户到分组", "0")); for (int i = 0; i < groupsnum; i++) { this.DDLgroups.Items.Add(new ListItem(jsonObj["groups"][i]["name"].ToString() + "(" + jsonObj["groups"][i]["count"].ToString() + ")", jsonObj["groups"][i]["id"].ToString())); this.DDlAddgroups.Items.Add(new ListItem(jsonObj["groups"][i]["name"].ToString(), jsonObj["groups"][i]["id"].ToString())); } } /// <summary> /// 输入页码提交跳转 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void LinkBtnToPage_Click(object sender, EventArgs e) { if (String.IsNullOrWhiteSpace(this.txtPageIndex.Text.ToString().Trim())) { ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('页码不能为空!')", true); this.txtPageIndex.Focus(); return; } if (IsNum(this.txtPageIndex.Text.ToString().Trim())) { ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('页码数只能输入数字!')", true); this.txtPageIndex.Focus(); this.txtPageIndex.Text = this.lbPageIndex.Text.ToString(); return; } if (int.Parse(this.txtPageIndex.Text.ToString().Trim()) > int.Parse(this.lbCountPage.Text.ToString().Trim())) { ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('所输页数不能大于总页数!')", true); this.txtPageIndex.Focus(); this.txtPageIndex.Text = this.lbPageIndex.Text.ToString(); return; } BindGetAllUserOpenIdList(); } /// <summary> /// 判断是否是数字 /// </summary> /// <param name="text"></param> /// <returns></returns> public static bool IsNum(string text) // { for (int i = 0; i < text.Length; i++) { if (!Char.IsNumber(text, i)) { return true; //输入的不是数字 } } return false; //否则是数字 } /// <summary> /// 绑定用户基本信息事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void RepeaterWxUserList_ItemDataBound(object sender, RepeaterItemEventArgs e) { //CheckBox checkIn = e.Item.FindControl("CheckIn") as CheckBox; //checkIn.AutoPostBack = true; if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem) { WxOpenIdInfo wxopen = e.Item.DataItem as WxOpenIdInfo; Label lbwxopenID = e.Item.FindControl("lbwxopenID") as Label; lbwxopenID.Text = wxopen.WxopenId.ToString(); //根据OpenID获取用户基本信息。缓存处理 WeiXinServer wxs = new WeiXinServer(); ///从缓存读取accesstoken string Access_token = Cache["Access_token"] as string; if (Access_token == null) { //如果为空,重新获取 Access_token = wxs.GetAccessToken(); //设置缓存的数据7000秒后过期 Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration); } string Access_tokento = Access_token.Substring(17, Access_token.Length - 37); string jsonres ="https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + Access_tokento + "&openid=" + lbwxopenID.Text.ToString(); HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres); myRequest.Method = "GET"; HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); string content = reader.ReadToEnd(); reader.Close(); //使用前需要引用Newtonsoft.json.dll文件 JObject jsonObj = JObject.Parse(content); Image ImgHeadUrl = e.Item.FindControl("ImgHeadUrl") as Image; Label lbNickName = e.Item.FindControl("lbNickName") as Label; Label lbRemark = e.Item.FindControl("lbRemark") as Label; Label lbSubscrine_time = e.Item.FindControl("lbSubscrine_time") as Label; Label lbgroupId = e.Item.FindControl("lbgroupId") as Label; DropDownList DDlAddgroupss = e.Item.FindControl("DDlAddgroupss") as DropDownList; lbNickName.Text = jsonObj["nickname"].ToString(); if (!String.IsNullOrWhiteSpace(jsonObj["remark"].ToString())) { lbRemark.Text = "(" + jsonObj["remark"].ToString() + ")"; } ImgHeadUrl.ImageUrl = jsonObj["headimgurl"].ToString(); lbgroupId.Text = jsonObj["groupid"].ToString(); //获取关注时间 int totaltiem = int.Parse(jsonObj["subscribe_time"].ToString()); //将整型格式时间转换为时间格式 DateTime t = new DateTime(1970, 1, 1).AddSeconds(totaltiem); //转换后的时间会比原有时间小8个小时,因此需要加上8个小时 lbSubscrine_time.Text = t.AddHours(8).ToString(); string jjjjjjjjjddd = Cache["AllGroups_content"] as string; if (jjjjjjjjjddd == null) { jsonres = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token=" + Access_tokento; HttpWebRequest myRequestss = (HttpWebRequest)WebRequest.Create(jsonres); myRequest.Method = "GET"; HttpWebResponse myResponsess = (HttpWebResponse)myRequest.GetResponse(); StreamReader readerss = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); jjjjjjjjjddd = reader.ReadToEnd(); reader.Close(); //设置缓存的数据7000秒后过期 Cache.Insert("AllGroups_content", jjjjjjjjjddd, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration); } //使用前需要引用Newtonsoft.json.dll文件 JObject jsonObjss = JObject.Parse(jjjjjjjjjddd); int groupsnumss = jsonObjss["groups"].Count(); for (int i = 0; i < groupsnumss;i++ ) { if (jsonObjss["groups"][i]["id"].ToString().Equals(lbgroupId.Text.ToString())) { DDlAddgroupss.SelectedItem.Text = jsonObjss["groups"][i]["name"].ToString(); } } } } /// <summary> /// 创建分组 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void LinkBtnCreateGroup_Click(object sender, EventArgs e) { if (this.txtgroupsName.Value.ToString().Equals("分组名称")) { //// ScriptManager.RegisterClientScriptBlock(this.Page,this.GetType(),"","alert('不能为空!')",true); this.txtgroupsName.Focus(); return; } WeiXinServer wxs = new WeiXinServer(); string res = ""; ///从缓存读取accesstoken string Access_token = Cache["Access_token"] as string; if (Access_token == null) { //如果为空,重新获取 Access_token = wxs.GetAccessToken(); //设置缓存的数据7000秒后过期 Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration); } string Access_tokento = Access_token.Substring(17, Access_token.Length - 37); string posturl = "https://api.weixin.qq.com/cgi-bin/groups/create?access_token=" + Access_tokento; //string postData = "{\"group\":{\"name\":\""+this.txtgroupsName.Value.ToString().Trim()+"\"}}"; string postData = "{\"group\":{\"name\":\""+this.txtgroupsName.Value.ToString().Trim()+"\"}}"; res = wxs.GetPage(posturl, postData); ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('创建成功!如未显示,请退出重新登录即可!');location='WeiXinUserList.aspx';", true); } /// <summary> /// 全选、全不选 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void CheckAll_CheckedChanged(object sender, EventArgs e) { CheckBox checkAll = (CheckBox)sender; foreach (RepeaterItem item in this.RepeaterWxUserList.Items) { CheckBox checkIn = (CheckBox)item.FindControl("CheckIn"); checkIn.Checked = checkAll.Checked; } } /// <summary> /// 移动用户到分组 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void DDlAddgroups_SelectedIndexChanged(object sender, EventArgs e) { ///取得分组ID string groupId = this.DDlAddgroups.SelectedValue.ToString(); //this.Label1.Text = groupId.ToString(); Boolean bools = false; foreach (RepeaterItem item in this.RepeaterWxUserList.Items) { CheckBox checkIn = (CheckBox)item.FindControl("CheckIn"); if (checkIn.Checked) { bools = true; Label lbwxopenID = item.FindControl("lbwxopenID") as Label; WeiXinServer wxs = new WeiXinServer(); string res = ""; ///从缓存读取accesstoken string Access_token = Cache["Access_token"] as string; if (Access_token == null) { //如果为空,重新获取 Access_token = wxs.GetAccessToken(); //设置缓存的数据7000秒后过期 Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration); } string Access_tokento = Access_token.Substring(17, Access_token.Length - 37); string posturl = "https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token=" + Access_tokento; //POST数据例子:{"openid":"oDF3iYx0ro3_7jD4HFRDfrjdCM58","to_groupid":108} //string postData = "{\"openid\":\"" + openid.ToString().Trim() + "\",\"remark\":\"" + this.txtRemarkName.Value.ToString() + "\"}"; string postData = "{\"openid\":\"" + lbwxopenID.Text.ToString() + "\",\"to_groupid\":\"" + groupId.ToString() + "\"}"; res = wxs.GetPage(posturl, postData); //使用前需要引用Newtonsoft.json.dll文件 JObject jsonObj = JObject.Parse(res); ///获取返回结果的正确|true|false, string isright = jsonObj["errcode"].ToString();//0 string istrueorfalse = jsonObj["errmsg"].ToString();//ok if (isright.Equals("0") && istrueorfalse.Equals("ok")) { ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('移动用户成功!');location='WeiXinUserList.aspx';", true); } else { ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('移动用户失败!');", true); return; } } } if (!bools) { ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('未选中项!');location='WeiXinUserList.aspx';", true); return; } }
WeiXinServer wxs = new WeiXinServer(); classe, principalement utilisée pour obtenir des passes et des méthodes de flux de charge. Le code est le suivant :
/// <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 { // 设置参数 request = WebRequest.Create(p) as HttpWebRequest; CookieContainer cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; request.AllowAutoRedirect = true; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; outstream = request.GetRequestStream(); outstream.Write(data, 0, data.Length); outstream.Close(); //发送请求并获取相应回应数据 response = request.GetResponse() as HttpWebResponse; //直到request.GetResponse()程序才开始向目标网页发送Post请求 instream = response.GetResponseStream(); sr = new StreamReader(instream, encoding); //返回结果网页(html)代码 string content = sr.ReadToEnd(); string err = string.Empty; return content; } catch (Exception ex) { string err = ex.Message; return string.Empty; } } }
Modifier le code de la page de notes :
protected void Page_Load(object sender, EventArgs e) { if(Request.QueryString["id"]!=null) { String openid = Request.QueryString["id"].ToString(); this.txtOpenId.Value = openid.ToString(); //根据OpenID获取用户基本信息。缓存处理 WeiXinServer wxs = new WeiXinServer(); ///从缓存读取accesstoken string Access_token = Cache["Access_token"] as string; if (Access_token == null) { //如果为空,重新获取 Access_token = wxs.GetAccessToken(); //设置缓存的数据7000秒后过期 Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration); } string Access_tokento = Access_token.Substring(17, Access_token.Length - 37); string jsonres = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + Access_tokento + "&openid=" + openid; HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(jsonres); myRequest.Method = "GET"; HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); string content = reader.ReadToEnd(); reader.Close(); //使用前需要引用Newtonsoft.json.dll文件 JObject jsonObj = JObject.Parse(content); //假如备注名不为空,给备注名文本框赋值,显示原有的备注名 if (!String.IsNullOrWhiteSpace(jsonObj["remark"].ToString())) { this.txtRemarkName.Value = jsonObj["remark"].ToString(); } } } /// <summary> /// 设置备注名 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void LinkBtnSet_Click(object sender, EventArgs e) { String openid = Request.QueryString["id"].ToString(); WeiXinServer wxs = new WeiXinServer(); string res = ""; ///从缓存读取accesstoken string Access_token = Cache["Access_token"] as string; if (Access_token == null) { //如果为空,重新获取 Access_token = wxs.GetAccessToken(); //设置缓存的数据7000秒后过期 Cache.Insert("Access_token", Access_token, null, DateTime.Now.AddSeconds(7000), System.Web.Caching.Cache.NoSlidingExpiration); } string Access_tokento = Access_token.Substring(17, Access_token.Length - 37); string posturl = "https://api.weixin.qq.com/cgi-bin/user/info/updateremark?access_token=" + Access_tokento; string postData = "{\"openid\":\"" + openid.ToString().Trim() + "\",\"remark\":\"" + this.txtRemarkName.Value.ToString() + "\"}"; res = wxs.GetPage(posturl, postData); //使用前需药引用Newtonsoft.json.dll文件 JObject jsonObj = JObject.Parse(res); ///获取返回结果的正确|true|false, string isright = jsonObj["errcode"].ToString();//0 string istrueorfalse = jsonObj["errmsg"].ToString();//ok if (isright.Equals("0") && istrueorfalse.Equals("ok")) { ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('修改备注成功!');location='WeiXinUserList.aspx';", true); } else { ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('修改备注失败!');", true); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!