侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

微信(小程序)  /  管理员 发布于 7年前   155

本文实例为大家分享了微信公众平台实现获取用户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("");  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="https:/article/<%=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微信开发教程汇总》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    .net微信开发 如何获取AccessToken
    下一条:
    ASP.NET微信公众号查看粉丝信息接口
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 微信模板消息改版后发送规则记录(微信订阅消息参数值内容限制说明)(1个评论)
    • 微信支付v3对接所需工具及命令(0个评论)
    • 2023年9月1日起:微信小程序必须备案才能上线运营(0个评论)
    • 腾讯官方客服回应了:微信好友上限约10000个!(1个评论)
    • 2023年做微信小程序的老铁注意:新增收费项、微信小程序获取手机号也收费了(2个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-10
    • 2018-01
    • 2020-03
    • 2021-06
    • 2021-10
    • 2022-03
    • 2023-02
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客