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

2017-02-15 20:02:55 .net
这篇文章主要为大家详细介绍了.NET微信公众号获取OpenID和用户信息的方法,用户OpenID对于微信公众平台开发尤为重要,感兴趣的小伙伴们可以参考一下

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

Index.aspx.cs代码:

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("http://www.jb51.net");
 public string scope = "【删除这个并填入请求类型,例如:snsapi_userinfo】";
 
 #region 显示页面
 public string accesstoken;
 public string nickname;Index.aspx内容:
 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内容:
<%@ 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微信开发教程汇总》,欢迎大家学习阅读。