Welcome

首页 / 网页编程 / ASP.NET / .NET微信公众号获取OpenID和用户信息

本文实例为大家分享了微信公众平台实现获取用户OpenID的方法,供大家参考,具体内容如下
Index.aspx.cs代码:
 public partial class Index : System.Web.UI.Page {//用户idpublic string openid = "";//公众号信息部分public string appid = ConfigurationManager.AppSettings["AppId"];public string appsecret = ConfigurationManager.AppSettings["AppSecret"];public string redirect_uri =HttpUtility.UrlEncode("http://www.jb51.net");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 = "";#endregionprotected 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(); //头像urlprovince = 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 {//跳转到前端页面.aspxResponse.Redirect(Request.Url.ToString()); }} }
Index.aspx内容:

<%@ 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 %>" alt=""></p></td><td> <p>privilege:<%=privilege%></p></td><td></td> </tr></table> </div> </form></body></html>
HttpClientHelper.cs代码:

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); }} }
结果如图:


本文已被整理到了《ASP.NET微信开发教程汇总》,欢迎大家学习阅读。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。