.NET微信公众号获取OpenID和用户信息

2025-05-29 0 58

本文实例为大家分享了微信公众平台实现获取用户OpenID的方法,供大家参考,具体内容如下

Index.aspx.cs代码:

?

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
public partial class Index : System.Web.UI.Page

{

//用户id

public string openid = "";

//公众号信息部分

public string appid = ConfigurationManager.AppSettings["AppId"];

public string appsecret = ConfigurationManager.AppSettings["AppSecret"];

public string redirect_uri =HttpUtility.UrlEncode("//www.zzvips.com");

public string scope = "【删除这个并填入请求类型,例如:snsapi_userinfo】";

#region 显示页面

public string accesstoken;

public string nickname;

public string sex;

public string headimgurl;

public string province;

public string country;

public string language;

public string city;

public string privilege = "";

#endregion

protected void Page_Load(object sender, EventArgs e)

{

/*

*微信认证获取openid部分:

*临时认证code

*/

//微信认证部分:第二步 获得code

string code = Request["code"];

if (string.IsNullOrEmpty(code))

{

//如果code没获取成功,重新拉取一遍

OpenAccess();

}

//微信认证部分:第三步 获得openid

string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appid, appsecret, code);

string result = HttpClientHelper.GetResponse(url);

LogHelper.WriteFile(result);

JObject outputObj = JObject.Parse(result);

//微信认证部分:第四步 获得更多信息

accesstoken = outputObj["access_token"].ToString();

openid = outputObj["openid"].ToString();

url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN",accesstoken,openid);

string result1 = HttpClientHelper.GetResponse(url);

LogHelper.WriteFile(result1);

JObject outputObj1 = JObject.Parse(result1);//将json转为数组

//以下是第四步获得的信息:

nickname = outputObj1["nickname"].ToString(); //昵称

sex = outputObj1["sex"].ToString(); //性别什么的

headimgurl = outputObj1["headimgurl"].ToString(); //头像url

province = outputObj1["province"].ToString(); ;

country = outputObj1["country"].ToString(); ;

language = outputObj1["language"].ToString(); ;

city = outputObj1["city"].ToString(); ;

//将获得的用户信息填入到session中

Session["openid"] = outputObj1["openid"];

//转向回入口

//OpenAccess();

}

/*

* 接入入口

* 开放到微信菜单中调用

* @param $dir_url 来源url

* @since 1.0

* @return void

*/

public void OpenAccess()

{

//判断session不存在

if (Session["openid"] == null)

{

//认证第一步:重定向跳转至认证网址

string url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&&response_type=code&scope=snsapi_userinfo&m=oauth2#wechat_redirect", appid, redirect_uri);

Response.Redirect(url);

}

//判断session存在

else

{

//跳转到前端页面.aspx

Response.Redirect(Request.Url.ToString());

}

}

}

Index.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

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
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="TEST.Index" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title></title>

<meta name="viewport" content="width=device-width, initial-scale=1" />

<style type="text/css">

td

{

word-wrap: break-word;

}

</style>

<script type="text/javascript">

</script>

</head>

<body>

<form id="form1" runat="server">

<div id="wu" runat="server">

<table style="width: 100%;">

<tr>

<td style="width: 150px;">

<p>

openid:<%=openid%></p>

</td>

<td>

<p>

nickname:<%=nickname%></p>

</td>

<td>

<p>

sex:<%=sex%></p>

</td>

</tr>

<tr>

<td>

<p>

language:<%=language%></p>

</td>

<td>

<p>

city:<%=city%></p>

</td>

<td>

<p>

country:<%=country%></p>

</td>

</tr>

<tr>

<td>

<p>

headimgurl:<img width="50px;" src="<%=headimgurl %>" id=\"codetool\">

HttpClientHelper.cs代码:

?

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
public class HttpClientHelper

{

/// <summary>

/// get请求

/// </summary>

/// <param name="url"></param>

/// <returns></returns>

public static string GetResponse(string url)

{

if (url.StartsWith("https"))

{

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

}

var httpClient = new HttpClient();

httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json"));

HttpResponseMessage response = httpClient.GetAsync(url).Result;

if (response.IsSuccessStatusCode)

{

string result = response.Content.ReadAsStringAsync().Result;

return result;

}

return null;

}

public static T GetResponse<T>(string url)

where T : class, new()

{

if (url.StartsWith("https"))

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

var httpClient = new HttpClient();

httpClient.DefaultRequestHeaders.Accept.Add(

new MediaTypeWithQualityHeaderValue("application/json"));

HttpResponseMessage response = httpClient.GetAsync(url).Result;

T result = default(T);

if (response.IsSuccessStatusCode)

{

Task<string> t = response.Content.ReadAsStringAsync();

string s = t.Result;

result = JsonConvert.DeserializeObject<T>(s);

}

return result;

}

/// <summary>

/// post请求

/// </summary>

/// <param name="url"></param>

/// <param name="postData">post数据</param>

/// <returns></returns>

public static string PostResponse(string url, string postData)

{

if (url.StartsWith("https"))

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

HttpContent httpContent = new StringContent(postData);

httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

var httpClient = new HttpClient();

HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

if (response.IsSuccessStatusCode)

{

string result = response.Content.ReadAsStringAsync().Result;

return result;

}

return null;

}

/// <summary>

/// 发起post请求

/// </summary>

/// <typeparam name="T"></typeparam>

/// <param name="url">url</param>

/// <param name="postData">post数据</param>

/// <returns></returns>

public static T PostResponse<T>(string url, string postData)

where T : class, new()

{

if (url.StartsWith("https"))

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

HttpContent httpContent = new StringContent(postData);

httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

var httpClient = new HttpClient();

T result = default(T);

HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

if (response.IsSuccessStatusCode)

{

Task<string> t = response.Content.ReadAsStringAsync();

string s = t.Result;

result = JsonConvert.DeserializeObject<T>(s);

}

return result;

}

/// <summary>

/// V3接口全部为Xml形式,故有此方法

/// </summary>

/// <typeparam name="T"></typeparam>

/// <param name="url"></param>

/// <param name="xmlString"></param>

/// <returns></returns>

public static T PostXmlResponse<T>(string url, string xmlString)

where T : class, new()

{

if (url.StartsWith("https"))

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

HttpContent httpContent = new StringContent(xmlString);

httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

var httpClient = new HttpClient();

T result = default(T);

HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;

if (response.IsSuccessStatusCode)

{

Task<string> t = response.Content.ReadAsStringAsync();

string s = t.Result;

result = XmlDeserialize<T>(s);

}

return result;

}

/// <summary>

/// 反序列化Xml

/// </summary>

/// <typeparam name="T"></typeparam>

/// <param name="xmlString"></param>

/// <returns></returns>

public static T XmlDeserialize<T>(string xmlString)

where T : class, new()

{

try

{

var ser = new XmlSerializer(typeof (T));

using (var reader = new StringReader(xmlString))

{

return (T) ser.Deserialize(reader);

}

}

catch (Exception ex)

{

throw new Exception("XmlDeserialize发生异常:xmlString:" + xmlString + "异常信息:" + ex.Message);

}

}

}

结果如图:

.NET微信公众号获取OpenID和用户信息

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 .NET微信公众号获取OpenID和用户信息 https://www.kuaiidc.com/100340.html

相关文章

发表评论
暂无评论