热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

asp.net微信开发中如何管理已关注用户

本篇内容主要讲解“asp.net微信开发中如何管理已关注用户”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学

本篇内容主要讲解“asp.net微信开发中如何管理已关注用户”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“asp.net微信开发中如何管理已关注用户”吧!

公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成。一次拉取调用最多拉取10000个关注者的OpenID,可以通过多次拉取的方式来满足需求。

接口调用请求说明

http请求方式: GET(请使用https协议)

asp.net微信开发中如何管理已关注用户

返回说明

正确时返回JSON数据包:

asp.net微信开发中如何管理已关注用户

错误时返回JSON数据包(示例为无效AppID错误):

{"errcode":40013,"errmsg":"invalid appid"}
附:关注者数量超过10000时

当公众号关注者数量超过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"
}

微信官方网站后台的接口权限表里(以服务号为例)每天调用的获取用户列表能获取500次,获取用户基本信息可以获取500000次,所以说接下来,我在获取用户列表的时候,会用到缓存,别看500次不少了,
可是真正的用起来快得不得了,先上效果图如下:

asp.net微信开发中如何管理已关注用户

先来看看用户列表,官网说获取用户的列表返回的是一组组openID,针对这个特性,我是这么做的,
创建一个用于存储openId的类

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

然后再创建用户信息的基本类

 /// 
 /// 微信用户基本信息类
 /// 
 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

 }

 用户列表前台代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WeiXinUserList.aspx.cs" Inherits="DQWebSite.Administrator.WeiXinUserList" %>






 
 
 

 
 


 
 
  位置:
  
   
  • 首页
  •    
  • 微信管理
  •    
  • 德桥员工服务中心--关注者列表管理
  •     
                    新建分组关闭  
        30字符以内
          确定创建           已关注人数       全选                    + 新建分组   分组管理   刷  新 <%--      查询--%>                     OpenID    头像    昵称(备注名)    关注时间    所属分组    操作                     <%--OnCheckedChanged="CheckIn_CheckedChanged"--%>                                                                   分组名称                    &#39;> 修改备注名称                       确定       >>|    >     <    |<<    当前第      页/   共      页      共搜索到       条记录.          

    获取用户列表绑定用户信息的后台代码,已包括,修改备注名,将用户移动到分组,新建分组代码

    asp.net微信开发中如何管理已关注用户

    分组统计,用于显示每个分组的已存在人数,无其他作用

    上代码:

     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;
      
     }
     /// 
     /// 获取所有用户的openId列表
     /// 
     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 openidlist = new List();
    
    
      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();
     }
     /// 
     /// 绑定分组列表
     /// 
     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()));
      }
     }
     /// 
     /// 输入页码提交跳转
     /// 
     /// 
     /// 
     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;页码数只能输入数字!&#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;所输页数不能大于总页数!&#39;)", true);
      this.txtPageIndex.Focus();
      this.txtPageIndex.Text = this.lbPageIndex.Text.ToString();
      return;
      }
    
      BindGetAllUserOpenIdList();
     }
     /// 
     /// 判断是否是数字
     /// 
     /// 
     /// 
     public static bool IsNum(string text) //
     {
      for (int i = 0; i < text.Length; i++)
      {
      if (!Char.IsNumber(text, i))
      {
       return true; //输入的不是数字 
      }
      }
      return false; //否则是数字
     }
     /// 
     /// 绑定用户基本信息事件
     /// 
     /// 
     /// 
     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();
       }
      }
    
      }
     }
     /// 
     /// 创建分组
     /// 
     /// 
     /// 
     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();
    
      //设置缓存的数据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;创建成功!如未显示,请退出重新登录即可!&#39;);location=&#39;WeiXinUserList.aspx&#39;;", true);
     }
     /// 
     /// 全选、全不选
     /// 
     /// 
     /// 
     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;
      }
     }
    
     /// 
     /// 移动用户到分组
     /// 
     /// 
     /// 
     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(&#39;移动用户成功!&#39;);location=&#39;WeiXinUserList.aspx&#39;;", true);
       }
       else
       {
       ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;移动用户失败!&#39;);", true);
       return;
       }
      }
    
      }
      if (!bools)
      {
      ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;未选中项!&#39;);location=&#39;WeiXinUserList.aspx&#39;;", true);
      return;
      }
     }

     WeiXinServer wxs = new WeiXinServer();是单独创建的一个类,主要用来获取通行证和加载流的方法,代码如下:

     /// 
     /// 微信服务类
     /// 
     public class WeiXinServer
     {
     /// 
     /// 获取通行证
     /// 
     /// 
     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;
      }
     }
     }

    修改备注页面的代码:

     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();
      }
    
      }
     }
     /// 
     /// 设置备注名
     /// 
     /// 
     /// 
     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(&#39;修改备注成功!&#39;);location=&#39;WeiXinUserList.aspx&#39;;", true);
      }
      else
      {
      ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert(&#39;修改备注失败!&#39;);", true);
      }
    
     }

    到此,相信大家对“asp.net微信开发中如何管理已关注用户”有了更深的了解,不妨来实际操作一番吧!这里是编程笔记网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


    推荐阅读
    • GreenDAO快速入门
      前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
    • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
    • 开发笔记:加密&json&StringIO模块&BytesIO模块
      篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
    • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
    • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
    • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
    • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
    • 向QTextEdit拖放文件的方法及实现步骤
      本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
    • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
      本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
    • 使用在线工具jsonschema2pojo根据json生成java对象
      本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
    • XML介绍与使用的概述及标签规则
      本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
    • CF:3D City Model(小思维)问题解析和代码实现
      本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
    • 如何在服务器主机上实现文件共享的方法和工具
      本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
    • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
    • 图像因存在错误而无法显示 ... [详细]
    author-avatar
    jinmeiyy_368
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有