微信公众账号 如何获取 openid

发布网友

我来回答

1个回答

懂视网

本文实例为大家分享了微信公众平台实现获取用户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("//www.gxlcms.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内容:

<%@ 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微信开发教程汇总》,欢迎大家学习阅读。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com