> 위챗 애플릿 > 위챗 개발 > .NET WeChat 공개 계정은 OpenID 및 사용자 정보 인스턴스 분석을 얻습니다.

.NET WeChat 공개 계정은 OpenID 및 사용자 정보 인스턴스 분석을 얻습니다.

高洛峰
풀어 주다: 2017-03-31 15:33:33
원래의
4132명이 탐색했습니다.

이 글에서는 주로 .NET WeChat 공개 계정에 대한 사용자 정보와 OpenID를 얻는 방법을 자세히 소개합니다. 관심 있는 친구들은 WeChat 공개 플랫폼 개발에 특히 중요합니다.

이 기사의 예는 참고용으로 WeChat 공개 플랫폼에서 사용자의 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     style="max-width:90%" src="<%=headimgurl % alt=".NET WeChat 공개 계정은 OpenID 및 사용자 정보 인스턴스 분석을 얻습니다." >" 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 WeChat 공개 계정은 OpenID 및 사용자 정보 인스턴스 분석을 얻습니다.

위 내용은 .NET WeChat 공개 계정은 OpenID 및 사용자 정보 인스턴스 분석을 얻습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿