Maison  >  Article  >  Applet WeChat  >  Le compte public .NET WeChat obtient une analyse d'instance d'OpenID et d'informations utilisateur

Le compte public .NET WeChat obtient une analyse d'instance d'OpenID et d'informations utilisateur

高洛峰
高洛峰original
2017-03-31 15:33:334080parcourir

Cet article présente principalement en détail la méthode d'obtention des informations OpenID et utilisateur pour le compte public .NET WeChat. L'utilisateur OpenID est particulièrement important pour le développement de la plateforme publique WeChat. Les amis intéressés peuvent s'y référer

Le. L'exemple dans cet article partage avec vous la méthode d'obtention de l'OpenID de l'utilisateur sur la plateforme publique WeChat pour votre référence. Le contenu spécifique est le suivant

Code 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());
   }
  }

 }

Contenu 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     style="max-width:90%" src="<%=headimgurl % alt="Le compte public .NET WeChat obtient une analyse d'instance d'OpenID et d'informations utilisateur" >" alt=""></p>
    </td>
    <td>
     <p>
      privilege:<%=privilege%></p>
    </td>
    <td>
    </td>
   </tr>
  </table>
 </p>
 </form>
</body>
</html>

Code 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);
   }
  }
 }

Le résultat est le suivant :

Le compte public .NET WeChat obtient une analyse dinstance dOpenID et dinformations utilisateur

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn