利用Senparc.Weixin SDK 实现微信用户的授权,并获取信息
前一段时间在学校做过一个项目,就是利用的Senparc.Weixin SDK 做的,于是翻看以前代码,虽然有注释,但是还是看的迷迷糊糊的,干脆就单步执行一遍看看是怎么实现的,然后就重新写了个简易的授权的界面。贴上代码,温故而知新。
用的MVC
<appSettings>
//配置文件里面写上自己的appid 和appsecret
<add key="appID" value="xxxxxxxxxxxa"/>
<add key ="appsecret" value="bxxxxxxxxx8"/>
</appSettings>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Configuration;
using Senparc.Weixin;//引用sdk 命名空间
using Senparc.Weixin.MP.AdvancedAPIs;
using Senparc.Weixin.MP.AdvancedAPIs.OAuth; namespace WeChat.Controllers
{
//授权控制器
public class OAuthController : Controller
{
//这两个已经在web.config里面写入,所以直接利用ConfiurationManager类下的AppSetting方法获取
public static readonly string appID = ConfigurationManager.AppSettings["appID"];
public static readonly string appsecret = ConfigurationManager.AppSettings["appsecret"];
public static readonly string Domin = "http://zhao.xxxx.xin";//这个是构造回调网页所需要的前缀, 一定要加上http:// 不然会出现redirect_uri错误
// GET: OAuth
public ActionResult Index(string returnUrl)
{
//2.构造redirect_uri 也就是回调函数 $"" 相当于string.format在C#6.0之后出现的也是占位符
//new { returnUrl} 这个的意思就是匿名构造函数,为什么只有一个值,因为returnUrl=returnUrl 一致,所以可以直接写
/*
*Url.Action("方法名","匿名方法") 需要回调函数,所以需要再写一个CallBack方法,如果不使用过滤器的话,就returnUrl="/"
*/
string redirect_uri = $"{Domin}{Url.Action("CallBack", new { returnUrl="/" })}";
//3.state 也是下面的方法需要的参数,这个参数是可以自定义的
string state = "wx" + DateTime.Now.Millisecond;
Session["state"] = state;//一旦比较完之后需要清空必须清空
//1.OAuthApi下的GetAuthorizeUrl方法用来获取验证地址,第二个参数是redirect_uri,所以我们就需要构造这个参数
string redirect= OAuthApi.GetAuthorizeUrl(appID, redirect_uri, state, Senparc.Weixin.MP.OAuthScope.snsapi_base); return Redirect(redirect);
}
////为什么需要CallBack,在获取到用户的授权之后,需要获取用户的code
public ActionResult CallBack(string code, string state, string returnUrl)
{
if (Session["state"].ToString() != state)
{
Session["state"] = null;
return Content("请重新进入");
}
Session["state"] = null;
//如果code返回的是个空值,则需要回到授权界面,重新授权
if (string.IsNullOrEmpty(code))
{
return RedirectToAction("index");
}
//通过回调函数返回的code来获取令牌 ,如果不懂可单步执行,看url的变化
var accessToken = OAuthApi.GetAccessToken(appID, appsecret, code);//这里返回的是一个对象,可以用弱类型var接收
if (accessToken.errcode != ReturnCode.请求成功)
{
//如果令牌的错误信息不等于请求成功,则需要重新返回授权界面
return RedirectToAction("index");
}
Session["oauthAccessToken"] = accessToken;//保存起来过滤器判断
try
{
Session["userInfo"] = OAuthApi.GetUserInfo(accessToken.access_token, accessToken.openid);
return Redirect(returnUrl);
}
catch
{
//如果没有获取到用户的信息,则需要重新进去授权界面 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);
}
}
}
利用Senparc.Weixin SDK 实现微信用户的授权,并获取信息的更多相关文章
- Senparc.Weixin SDK 微信公众号 .NET 开发教程 索引
Senparc.WeixinSDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到比较稳定的版本,这个过程中我觉得有必要整理一些思路和经验,和大家一起分享.也欢迎大 ...
- 【重要更新】Senparc.Weixin SDK v6.5 升级说明(支持 .NET Core 3.0 及分布式消息上下文)
Senparc.Weixin SDK v6.5 开始支持 .NET Core 3.0,并将微信消息上下文进行了大幅度的重构,支持了使用分布式缓存存储上下文信息,这意味着在分布式系统中,现在 Senpa ...
- 【重要更新】Senparc.Weixin SDK v4.3.3升级说明
为了更好地适应微信越来越快的API更新速度和越来越多的API数量,本次Senparc.Weixin.dll v4.3.3对一些通用功能进行了深度的重构. 本次更新同时影响以下所有Senparc.Wei ...
- Senparc.Weixin SDK v5.0 升级公告
经过五年半的持续维护,Senparc.Weixin SDK 逐步丰满和完善,在升级的过程中,我们为基础库(Senparc.Weixin.dll)加入了许多通用的功能,例如加密/解密算法.通用缓存方法等 ...
- 【原创】在 ASP.NET Core 3.1 中使用 Senparc.Weixin.Work 企业微信 SDK —— 发送文本消息
下面在 Web 空应用里展示一个简单的例子来实现发送文本消息. 本文目录: 创建 Web 空应用 命令行方式创建 添加SDK引用 命令行方式 进入项目目录 添加包引用 配置和使用SDK 添加appse ...
- 【原创】在 .NET Core 3.1 中使用 Senparc.Weixin.Work 企业微信 SDK —— 发送文本消息
下面在控制台应用里展示一个简单的例子来实现发送文本消息. 本文目录: 创建控制台应用 添加SDK引用 命令行方式 进入项目目录 添加包引用 配置和使用SDK 添加appsettings.json文件 ...
- 【重要更新】Senparc.Weixin SDK v4.4 升级说明
本次更新同时影响以下所有Senparc.Weixin相关版本的dll: Senparc.Weixin.dll 升级到 v4.4.2(重要) Senparc.Weixin.MP.dll 升级到 v13. ...
- webform获取微信用户的授权
这是一个利用webform做出来的简单demo,微信授权,获取微信用户的基本信息.方便以后加深记忆. public partial class Index : System.Web.UI.Page { ...
- 解决微信公众号授权登录和开放平台微信第三方应用授权登录获取到的用户Openid关联问题
开发背景: 最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权,以及微信会员卡,优惠券和扫描二 ...
随机推荐
- 「小程序JAVA实战」swagger2的使用与接口测试(34)
转自:https://idig8.com/2018/08/31/xiaochengxujavashizhanswagger2deshiyongyujiekouceshi34/ 我们已经开发完了一个用户 ...
- STL : List使用时应注意的问题
这篇文章所述只是本人遇到的问题,仅供参考. #include<list> #include<iostream> using namespace std; class Foo { ...
- SVN用命令行更换本地副本IP地址
1.运行svn info现连的svn信息 2.运行svn switch --relocate https://原来的地址 https://改过后的地址. svn help switch 查看switc ...
- Windows下DOS命令大全(经典收藏)
copy \\ip\admin$\svv.exe c:\ 或:copy\\ip\admin$\*.* 复制对方admini$共享下的srv.exe文件(所有文件)至本地C: xcopy 要复制的文件或 ...
- PHP提取字符串中的手机号正则表达式怎么写
0. 简介 PHP通过正则表达式提取字符串中的手机号并判断运营商,简单快速方便,能提取多个手机号. 1. 代码 <?php header("content-type:text/plai ...
- Sqlserver ROW_NUMBER()
SELECT ROW_NUMBER() OVER (ORDER BY A.orderdate,A.orderid),* from Sales.Orders A
- Ajax工作原理和原生JS的ajax封装
前言: 之所以用ajax作为博客的开篇,是因为无论从ajax的出现还是从它的作用上来说,ajax对于前端无疑是意义重大的.甚至可以说,是ajax带来了前端这个行业.当然,历史并不能说明当下,曾经的辉煌 ...
- Cocoapods 版本升级
和往常一样使用 Cocoapods ,执行命令: $ pod install #输出信息 /System/Library/Frameworks/Ruby.framework/Versions/2.0/ ...
- 跨版本mysqldump恢复报错Errno1449
已经有一套主从mysql,新增两个slave主库Server version: 5.6.22-log MySQL Community Server (GPL)旧从库Server version: 5. ...
- windows 查看端口被占用进程
查看占用63243是谁 C:\Users\Administrator>netstat -aon|findstr "63243" TCP 172.27.33.11:63243 ...