服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - ASP.NET教程 - .NET微信公众号查看关注者接口

.NET微信公众号查看关注者接口

2020-03-28 12:55天风隼 ASP.NET教程

这篇文章主要为大家详细介绍了.NET微信公众号查看关注者接口的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java获取不同路径的方法,供大家参考,具体内容如下

实体类:

?
1
2
3
4
5
6
7
public class userlist
 {
   public string total { get; set; }
   public string count { get; set; }
   public userlistopenid data { get; set; }
   public string next_openid { get; set; }
 }
?
1
2
3
4
public class userlistopenid
 {
   public List<string> openid { get; set;
 }
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class userdetail
 {
   public int subscribe { get; set; }
   public string openid { get; set; }
   public string nickname { get; set; }
   public int sex { get; set; }
   public string language { get; set; }
   public string city { get; set; }
   public string province { get; set; }
   public string country { get; set; }
   public string headimgurl { get; set; }
   public int subscribe_time { get; set; }
   public string unionid { get; set; }
   public string remark { get; set; }
   public int groupid { get; set; }
   public int[] tagid_list { get; set; }
 }

getUser.aspx代码:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="getUser.aspx.cs" Inherits="MyTest.WebUI.Manager.usermsg.getUser" %>
 
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title></title>
  <!-- Bootstrap -->
  <link href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
  <!--[if lt IE 9]>
   <script src="//cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
   <script src="//cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
  <![endif]-->
</head>
<body>
  <form runat="server">
 
    <div class="container">
      <div class="row">
        <div class="col-md-6 col-md-push-2">
          <asp:Button class="btn btn-primary" ID="btnGet" runat="server" Text="获取所有用户openID" OnClick="btnGet_Click" />
        </div>
        <div class="col-md-6 col-md-pull-2">
          <asp:DropDownList CssClass="form-control" ID="ddlopenids" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlopenids_SelectedIndexChanged"></asp:DropDownList>
          <asp:Label ID="lblMSG" runat="server" Text=""></asp:Label>
          <asp:Image class="img-circle" ID="imgHead" runat="server" Width="180px" Height="180px" />
        </div>
      </div>
    </div>
 
 
    <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
    <script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
  </form>
</body>
</html>
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public partial class getUser : System.Web.UI.Page
 {
   protected void Page_Load(object sender, EventArgs e)
   {
 
   }
 
   //获取用户列表
   protected void btnGet_Click(object sender, EventArgs e)
   {
     string next_opid = string.Empty;
     string url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token="+mainArg.get_Token()+"&next_openid=";
     HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
     using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
     {
       StreamReader sr = new StreamReader(response.GetResponseStream());
       string result = sr.ReadToEnd();
       sr.Close();
 
       MyTest.Common.Entity.userlist userlist = MyTest.Common.Util.JsonEntityExchange<MyTest.Common.Entity.userlist>.Json2Entity(result);
       //Response.Write(userlist.count + "/"+userlist.data+"/"+userlist.next_openid+"/"+userlist.total);
       ddlopenids.DataSource = userlist.data.openid;
       ddlopenids.DataTextField = "";
       ddlopenids.DataValueField = "";
       ddlopenids.DataBind();
       ListItem item = new ListItem();
       item.Text = "--请选择用户的openID--";
       item.Value = "--0--";
       ddlopenids.Items.Insert(0, item);
 
     }
   }
 
 
   //获取用户基本信息(包括UnionID机制)
   protected void ddlopenids_SelectedIndexChanged(object sender, EventArgs e)
   {
     string url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token="+ mainArg.get_Token() + "&openid="+ddlopenids.SelectedItem.Text+"&lang=zh_CN ";
     HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
     using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
     {
       StreamReader sr = new StreamReader(response.GetResponseStream());
       string result = sr.ReadToEnd();
       sr.Close();
       MyTest.Common.Entity.userdetail user= MyTest.Common.Util.JsonEntityExchange<MyTest.Common.Entity.userdetail>.Json2Entity(result);
 
       lblMSG.Text = user.subscribe + "/" + user.openid + "/" + user.nickname + "/";
       imgHead.ImageUrl = user.headimgurl;
 
     }
   }
 }

mainArg.cs获取accessToken帮助类:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
public class mainArg
 {
   //测试号
   public static string appid = "wx3eb5bf1290db2ca0";
   public static string secret = "e6013be0a7338c7d3e02877db116e231";
 
   public string jsapi_ticket;
   public string noncestr;
   public long timestamp;
   public string signature;
 
   private static string path = HttpContext.Current.Server.MapPath(@"~/TemplePath");
   private static string tokenPath = HttpContext.Current.Server.MapPath(@"~/TemplePath/token.txt");
   private static string ticketPath = HttpContext.Current.Server.MapPath(@"~/TemplePath/ticket.txt");
 
   public mainArg() {
     noncestr = getNonceStr();
     timestamp = getTime();
   }
   /// <summary>
   /// 获取access_token
   /// </summary>
   /// <returns></returns>
   public static string get_Token()
   {
     string token = null;
     //判断是否存在或过期
     if (File.Exists(tokenPath)) {
       FileStream fs = new FileStream(tokenPath, FileMode.Open);
       var serializer = new DataContractJsonSerializer(typeof(AccToken));
       AccToken readJSToken = (AccToken)serializer.ReadObject(fs);
       fs.Close();
       FileInfo fi = new FileInfo(tokenPath);
       if (CheckTimeOut(fi.LastWriteTime) < (readJSToken.expires_in-200)) {
 
         return token = readJSToken.access_token;
       }
 
     }
 
     string url = @"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&";
     string urlarg = @"appid=" + appid + @"&secret=" + secret;
     //      HttpUtility.UrlEncode(appid,Encoding.GetEncoding("utf-8"));
     url += urlarg;
     HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
     using (WebResponse response = req.GetResponse())
     {
       Stream s = response.GetResponseStream();
       StreamReader sr = new StreamReader(s);
       token = sr.ReadToEnd();
 
       if (!Directory.Exists(path))
       {
         Directory.CreateDirectory(path);
       }
       if (File.Exists(tokenPath))
       {
         File.Delete(tokenPath);
       }
       FileStream fs = File.Create(tokenPath);
       StreamWriter sw = new StreamWriter(fs);
       sw.Write(token);
       sw.Flush();
       sw.Close();
       fs.Close();
       FileStream fs1 = new FileStream(tokenPath, FileMode.Open);
       var serializer = new DataContractJsonSerializer(typeof(AccToken));
       AccToken readJSToken = (AccToken)serializer.ReadObject(fs1);
       fs1.Close();
       token = readJSToken.access_token;
       return token;
     }
 
   }
   /// <summary>
   /// 获取ticket
   /// </summary>
   /// <returns></returns>
   public string getTicket() {
     string ticket = null;
     // 判断是否存在或过期
     if (File.Exists(ticketPath))
     {
       FileStream fs = new FileStream(ticketPath, FileMode.Open);
       var serializer = new DataContractJsonSerializer(typeof(JsTicket));
       JsTicket readJSTicket = (JsTicket)serializer.ReadObject(fs);
       fs.Close();
       FileInfo fi = new FileInfo(ticketPath);
       if (CheckTimeOut(fi.LastWriteTime) < (readJSTicket.expires_in - 200))
       {
 
         return ticket = readJSTicket.ticket;
       }
 
     }
 
     string url = @"https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&";
     string urlarg = @"access_token="+get_Token();
     //      HttpUtility.UrlEncode(appid,Encoding.GetEncoding("utf -8"));
     url += urlarg;
     HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
     using (WebResponse response = req.GetResponse())
     {
       Stream s = response.GetResponseStream();
       StreamReader sr = new StreamReader(s);
       ticket = sr.ReadToEnd();
 
       if (!Directory.Exists(path))
       {
         Directory.CreateDirectory(path);
       }
       if (File.Exists(ticketPath))
       {
         File.Delete(ticketPath);
       }
       FileStream fs = File.Create(ticketPath);
       StreamWriter sw = new StreamWriter(fs);
       sw.Write(ticket);
       sw.Flush();
       sw.Close();
       fs.Close();
       FileStream fs1 = new FileStream(ticketPath, FileMode.Open);
       var serializer = new DataContractJsonSerializer(typeof(JsTicket));
       JsTicket readJSTicket = (JsTicket)serializer.ReadObject(fs1);
       fs1.Close();
       ticket = readJSTicket.ticket;
       return ticket;
     }
 
   }
   //
   public static long getTime() {
     return Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds);
   }
   public static string getTimeString(DateTime dt)
   {
     TimeSpan ts = dt.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
     return Convert.ToInt64(ts.TotalSeconds).ToString();
   }
   //获取16位随机字符串
   public static string getNonceStr()
   {
     int length = 16;
     string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     string str = "";
     Random rad = new Random();
     for (int i = 0; i < length; i++)
     {
       str += chars.Substring(rad.Next(0, chars.Length - 1), 1);
     }
     return str;
   }
 
 
   //得到签名
   public string getSign() {
 
     jsapi_ticket = getTicket();
     string s1 = string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url=http://winsee.imwork.net/Manager/Main/testjs.aspx", jsapi_ticket, noncestr, timestamp.ToString());    
     signature = GetSHA1(s1);
     return signature;
   }
   public static string GetSHA1(string strSource)
   {
     string strResult = string.Empty;
 
 
     System.Security.Cryptography.SHA1 sha = System.Security.Cryptography.SHA1.Create();
     byte[] bytResult = sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strSource));
     for (int i = 0; i < bytResult.Length; i++)
     {
       strResult = strResult + bytResult[i].ToString("x2");
     }
     return strResult;
   }
   //SHA1哈希加密算法
   public static string GetSHA1_1(string str_sha1_in)
   {
     SHA1 sha1 = new SHA1CryptoServiceProvider();
     byte[] bytes_sha1_in = Encoding.Default.GetBytes(str_sha1_in);
     byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
     string str_sha1_out = BitConverter.ToString(bytes_sha1_out);
     str_sha1_out = str_sha1_out.Replace("-", "").ToLower();
     return str_sha1_out;
   }
 
   // 判断是否超过7200s
   public static long CheckTimeOut(DateTime changeTime)
   {
     return Convert.ToInt64((DateTime.Now - changeTime).TotalSeconds);
 
   }
 
 
 
 }
 
 
# region 创建Json序列化 及反序列化类目
 //创建JSon类 保存文件 ticket.txt
 public class AccToken
 {
 
   public string access_token { get; set; }
   public long expires_in { get; set; }
 }
 
 //创建从微信返回结果的一个类 用于获取ticket
 public class JsTicket
 {
 
   public long errcode { get; set; }
   public string errmsg { get; set; }
   public string ticket { get; set; }
   public long expires_in { get; set; }
 }
 #endregion

JSon序列化,反序列化

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class JsonEntityExchange<T> where T:new()
  {
    /// <summary>
    /// json转实体LIST
    /// </summary>
    /// <param name="JsonStr"></param>
    /// <returns></returns>
    public static List<T> Json2Entitys(string JsonStr)
    {
      JavaScriptSerializer Serializer = new JavaScriptSerializer();
      List<T> objs = Serializer.Deserialize<List<T>>(JsonStr);
      return objs;
    }
    /// <summary>
    /// json转实体
    /// </summary>
    /// <param name="json"></param>
    /// <returns></returns>
    public static T Json2Entity(string json)
    {
      T obj = Activator.CreateInstance<T>();
      using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
      {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
        return (T)serializer.ReadObject(ms);
      }
    }
    /// <summary>
    /// 实体转json
    /// </summary>
    /// <param name="lists">实体list</param>
    /// <returns></returns>
    public static string Entity2Json(List<T> lists) {
 
      return new JavaScriptSerializer().Serialize(lists);
    }
  }

结果如图:

.NET微信公众号查看关注者接口

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

延伸 · 阅读

精彩推荐