.NET微信公众号获取OpenID和用户信息实例解析

互联网 17-3-31
这篇文章主要为大家详细介绍了.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;    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">   <p 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>   </p>   </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);     }    }   }

结果如图:

以上就是.NET微信公众号获取OpenID和用户信息实例解析的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:图文详解.Net语言Smobiler开发之如何仿微信朋友圈的消息样式

相关资讯