音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

.NET微信公众号获取OpenID和用户信息
日期:2021-09-07 22:22:32   来源:脚本之家

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

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

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    ASP编程JSP编程PHP编程.NET编程python编程