前一段时间在学校做过一个项目,就是利用的Senparc.Weixin SDK 做的,于是翻看以前代码,虽然有注释,但是还是看的迷迷糊糊的,干脆就单步执行一遍看看是怎么实现的,然后就重新写了个简易的授权的界面。贴上代码,温故而知新。

用的MVC

  1. <appSettings>
  2. //配置文件里面写上自己的appid 和appsecret
  3. <add key="appID" value="xxxxxxxxxxxa"/>
  4. <add key ="appsecret" value="bxxxxxxxxx8"/>
  5. </appSettings>
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Configuration;
  7. using Senparc.Weixin;//引用sdk 命名空间
  8. using Senparc.Weixin.MP.AdvancedAPIs;
  9. using Senparc.Weixin.MP.AdvancedAPIs.OAuth;
  10.  
  11. namespace WeChat.Controllers
  12. {
        //授权控制器
  13. public class OAuthController : Controller
  14. {
  15. //这两个已经在web.config里面写入,所以直接利用ConfiurationManager类下的AppSetting方法获取
  16. public static readonly string appID = ConfigurationManager.AppSettings["appID"];
  17. public static readonly string appsecret = ConfigurationManager.AppSettings["appsecret"];
  18. public static readonly string Domin = "http://zhao.xxxx.xin";//这个是构造回调网页所需要的前缀, 一定要加上http:// 不然会出现redirect_uri错误
  19. // GET: OAuth
  20. public ActionResult Index(string returnUrl)
  21. {
  22. //2.构造redirect_uri 也就是回调函数 $"" 相当于string.format在C#6.0之后出现的也是占位符
  23. //new { returnUrl} 这个的意思就是匿名构造函数,为什么只有一个值,因为returnUrl=returnUrl 一致,所以可以直接写
  24. /*
  25. *Url.Action("方法名","匿名方法") 需要回调函数,所以需要再写一个CallBack方法,如果不使用过滤器的话,就returnUrl="/"
  26. */
  27. string redirect_uri = $"{Domin}{Url.Action("CallBack", new { returnUrl="/" })}";
  28. //3.state 也是下面的方法需要的参数,这个参数是可以自定义的
  29. string state = "wx" + DateTime.Now.Millisecond;
  30. Session["state"] = state;//一旦比较完之后需要清空必须清空
  31. //1.OAuthApi下的GetAuthorizeUrl方法用来获取验证地址,第二个参数是redirect_uri,所以我们就需要构造这个参数
  32. string redirect= OAuthApi.GetAuthorizeUrl(appID, redirect_uri, state, Senparc.Weixin.MP.OAuthScope.snsapi_base);
  33.  
  34. return Redirect(redirect);
  35. }
  36. ////为什么需要CallBack,在获取到用户的授权之后,需要获取用户的code
  37. public ActionResult CallBack(string code, string state, string returnUrl)
  38. {
  39. if (Session["state"].ToString() != state)
  40. {
  41. Session["state"] = null;
  42. return Content("请重新进入");
  43. }
  44. Session["state"] = null;
  45. //如果code返回的是个空值,则需要回到授权界面,重新授权
  46. if (string.IsNullOrEmpty(code))
  47. {
  48. return RedirectToAction("index");
  49. }
  50. //通过回调函数返回的code来获取令牌 ,如果不懂可单步执行,看url的变化
  51. var accessToken = OAuthApi.GetAccessToken(appID, appsecret, code);//这里返回的是一个对象,可以用弱类型var接收
  52. if (accessToken.errcode != ReturnCode.请求成功)
  53. {
  54. //如果令牌的错误信息不等于请求成功,则需要重新返回授权界面
  55. return RedirectToAction("index");
  56. }
  57. Session["oauthAccessToken"] = accessToken;//保存起来过滤器判断
  58. try
  59. {
  60. Session["userInfo"] = OAuthApi.GetUserInfo(accessToken.access_token, accessToken.openid);
  61. return Redirect(returnUrl);
  62. }
  63. catch
  64. {
  65. //如果没有获取到用户的信息,则需要重新进去授权界面
  66.  
  67.          string redirect_uri = $"{Domin}{Url.Action("CallBack", new { returnUrl="/" })}";

          string state1 = "wx"+DateTime.Now.Millisecond;
          Session["state"] =state1;//一旦比较完之后需要清空必须清空
          string redirect = OAuthApi.GetAuthorizeUrl(appID, redirect_uri, state1, Senparc.Weixin.MP.OAuthScope.snsapi_base);            return Redirect(redirect);

}

  1. }
    }

利用Senparc.Weixin SDK 实现微信用户的授权,并获取信息的更多相关文章

  1. Senparc.Weixin SDK 微信公众号 .NET 开发教程 索引

    Senparc.WeixinSDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到比较稳定的版本,这个过程中我觉得有必要整理一些思路和经验,和大家一起分享.也欢迎大 ...

  2. 【重要更新】Senparc.Weixin SDK v6.5 升级说明(支持 .NET Core 3.0 及分布式消息上下文)

    Senparc.Weixin SDK v6.5 开始支持 .NET Core 3.0,并将微信消息上下文进行了大幅度的重构,支持了使用分布式缓存存储上下文信息,这意味着在分布式系统中,现在 Senpa ...

  3. 【重要更新】Senparc.Weixin SDK v4.3.3升级说明

    为了更好地适应微信越来越快的API更新速度和越来越多的API数量,本次Senparc.Weixin.dll v4.3.3对一些通用功能进行了深度的重构. 本次更新同时影响以下所有Senparc.Wei ...

  4. Senparc.Weixin SDK v5.0 升级公告

    经过五年半的持续维护,Senparc.Weixin SDK 逐步丰满和完善,在升级的过程中,我们为基础库(Senparc.Weixin.dll)加入了许多通用的功能,例如加密/解密算法.通用缓存方法等 ...

  5. 【原创】在 ASP.NET Core 3.1 中使用 Senparc.Weixin.Work 企业微信 SDK —— 发送文本消息

    下面在 Web 空应用里展示一个简单的例子来实现发送文本消息. 本文目录: 创建 Web 空应用 命令行方式创建 添加SDK引用 命令行方式 进入项目目录 添加包引用 配置和使用SDK 添加appse ...

  6. 【原创】在 .NET Core 3.1 中使用 Senparc.Weixin.Work 企业微信 SDK —— 发送文本消息

    下面在控制台应用里展示一个简单的例子来实现发送文本消息. 本文目录: 创建控制台应用 添加SDK引用 命令行方式 进入项目目录 添加包引用 配置和使用SDK 添加appsettings.json文件 ...

  7. 【重要更新】Senparc.Weixin SDK v4.4 升级说明

    本次更新同时影响以下所有Senparc.Weixin相关版本的dll: Senparc.Weixin.dll 升级到 v4.4.2(重要) Senparc.Weixin.MP.dll 升级到 v13. ...

  8. webform获取微信用户的授权

    这是一个利用webform做出来的简单demo,微信授权,获取微信用户的基本信息.方便以后加深记忆. public partial class Index : System.Web.UI.Page { ...

  9. 解决微信公众号授权登录和开放平台微信第三方应用授权登录获取到的用户Openid关联问题

    开发背景: 最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权,以及微信会员卡,优惠券和扫描二 ...

随机推荐

  1. Sass 入门 (一) 安装Sass

    Sass安装 ruby安装 因为sass依赖于ruby环境,所以装sass之前先确认装了ruby.先导官网下载个ruby 在安装的时候,请勾选Add Ruby executables to your ...

  2. Angularjs Ng_repeat中实现复选框选中并显示不同的样式

    最近做了一个选择标签的功能,把一些标签展示给用户,用户选择自己喜欢的标签,就类似我们在购物网站看到的那种过滤标签似的: 简单的效果如图所示: 首先看一下html代码: 1 <!DOCTYPE h ...

  3. VS2017更新后 在WIN7上找不到 stdio.h等的问题

    项目->属性->配置属性->常规->windows SDK版本.将其换成你现在的版本即可解决问题,如果不行就重新下个最新版SDK,如WIN10的.

  4. Oracle中关于DateTime的一些描述

    转载自:http://www.cnblogs.com/fmxyw/archive/2008/08/26/1276850.html 在做话务报表,参考一下信息   to_date()与24小时制表示法及 ...

  5. 关于StringUtils类isEmpty、isNotEmpty、isBlank、isNotBlank针对null、空字符串和空白字符(如空格、制表符)的区别

    isEmpty | null | 空字符串("")|空白字符(空格.制表符)| | isEmpty | true | true | false | | isNotEmpty | f ...

  6. Kafka源码分析

    本文主要针对于Kafka的源码进行分析,版本为kafka-0.8.2.1. 由于时间有限,可能更新比较慢... Kafka.scala // 读取配置文件 val props = Utils.load ...

  7. centos7的vsftpd的安装和配置

    安装vsftpd的服务器相关软件 安装vsftpd服务器和客户端 sudo yum install ftp vsftpd 安装一个加密工具 sudo yum install libdb-utils.x ...

  8. qmake not exec in ubuntu

    Description Today, I want to run qmake command in terminal, but, it has error message such qmake: co ...

  9. windows编程之内核对象

          学好windows编程,理解内核对象还是至关重要的(●'◡'●).闲话不多说,下面先来了解一下关于内核对象的知识:       内核对象(kernel object):内核对象是用于管理进 ...

  10. 在Qt中使用SQLite数据库

    前言 SQLite(sql)是一款开源轻量级的数据库软件,不需要server,可以集成在其他软件中,非常适合嵌入式系统. Qt5以上版本可以直接使用SQLite(Qt自带驱动). 用法 1 准备 引入 ...