基于ASP.NET MVC 微信网页登录授权(scope为snsapi_base) 流程 上 获取OPENID
流程图

我们需要判断是否存在OPENID 首先我们得先定义一个全局的OPENID 类似于普通账号密码登录系统的 当前登录用户ID 因为我是MVC 框架 我这里定义一个控制器基类 BaseController 然后将OPENID定义在BaseController中
public class BaseController : Controller
{
public string openid
{
get {
return Session["openid"].ToString();
}
set {
Session["openid"] = value;
}
}
}
然后定义一个HomeController 写一个 测试登录功能
public class HomeController : BaseController
{
// GET: Home
public ActionResult Login()
{
if (string.IsNullOrEmpty(openid)) //openid不存在 跳转授权
{
//此处忽略10万行授权相关代码
}
//此处忽略3000行获取用户信息相关
return View();
}
}
以上为一个大概 忽略大部分无关紧要代码后的微信授权登录功能代码 当然很多人要的都不是这些 接下来 是一些更详细的代码 大概分为2个大模块
- 获取OPENID
- 获取用户信息
这里我将这2个模块写成2个方法定义在WXHelper类中
public class WXHelper {
public string GetOpenID() {
return "openid";
}
public User_UserInfo GetUserInfo() {
User_UserInfo model_UserInfo = new User_UserInfo();
return model_UserInfo;
}
}
然后之前的Login Action 可以改成这样
public ActionResult Login()
{
if (string.IsNullOrEmpty(openid)) //openid不存在 跳转授权
{
openid = WXHelper.GetOpenID();
}
//LoginUserInfo 是我当前登录用户信息 你们自行找方式存 Session 或者全局变量之类的
LoginUserInfo = WXHelper.GetUserInfo();
return View();
}
下面我们开始实现第一个方法 GetOpenID 官方API
这里具体请求我就不 多说了 主意 几个地方 这里我是采用的 方式为 scope=snsapi_base
因为这里回调地址 无法写本地地址进行调试 所以我采用 手动记录code 并在有效期内手动在本地写入code 继续往下调试
不情愿的贴上代码
/// <summary>
/// 获取code 方法
/// </summary>
private static void GetWeChat_Code()
{
string urlhead = "https://";
string rediretUrl = "https%3a%2f%2fxxxx.com%2fHome%2fLoadCode";
string strUrl = $"{urlhead}open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={rediretUrl}&response_type=code&scope=snsapi_base&state=qwe12e12e#wechat_redirect";
//此处省略n行get请求方法
}
细心的朋友可能会发现上面的redireUrl 地址指向的是Home 控制器下面 LoadCode 这个 方法 SO
#region 微信授权回调
public ActionResult LoadCode(string code, string state)
{
return View();
}
#endregion
因为MVC 的参数映射 所以我只需要把 code 和state 写成方法参数即可 这里我就可以获取到code方法了 然后我们直接通过code 获取OPENID
#region 获取OpenID
public static string GetOpenId(string code)
{
string urlhead = "https://";
string strUrl = $"{urlhead}api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code";
Access_openid token = new Access_openid();
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(strUrl); //用GET形式请求指定的地址
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
//HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(wr.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
reader.Dispose();
//在这里对Access_token 赋值
token = JsonConvert.DeserializeObject<Access_openid>(content);
}
return token.openid;
}
#endregion
如果有人对这个Access_openid 对象感到懵逼的话 这里说一下 这个对象就是下图中 红框 获取到的JSON数据 的对象 这里我们是 snsapi_base 所以只需要 openid 切 整个授权过程到次结束

基于ASP.NET MVC 微信网页登录授权(scope为snsapi_base) 流程 上 获取OPENID的更多相关文章
- PHP实现微信网页登陆授权开发
这篇文章主要介绍了关于PHP实现微信网页登陆授权开发,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 更多PHP相关知识请关注我的专栏PHPzhuanlan.zhihu.com 微信开 ...
- JustAuth 1.15.9 版发布,支持飞书、喜马拉雅、企业微信网页登录
新增 修复并正式启用 飞书 平台的第三方登录 AuthToken 类中新增 refreshTokenExpireIn 记录 refresh token 的有效期 PR 合并 Github #101:支 ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)
C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...
- C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)
C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...
- ASP.NET MVC 微信公共平台开发之获取用户消息并处理
ASP.NET MVC 微信公共平台开发 获取用户消息并处理 获取用户消息 用户发送的消息是在微信服务器发送的一个HTTP POST请求中包含的,获取用户发送的消息要从POST请求的数据流中获取 微信 ...
- ASP.NET MVC 微信公共平台开发之验证消息的真实性
ASP.NET MVC 微信公共平台开发 验证消息的真实性 在MVC Controller所在项目中添加过滤器,在过滤器中重写 public override void OnActionExecuti ...
- 基于ASP.NET MVC和Bootstrap搭建响应式个人博客站(一)
1.0 为什么要做这个博客站? www.zynblog.com 在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了.而且下次再点击这个 ...
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二)
基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二) 之前文章中给大家说明了下我这个小小的想法,发现还是有不少人的支持和关注.你们的鼓励是对我最大的支持. 我总结了了 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC资源过滤和授权
最近比较忙,博客很久没更新了,很多博友问何时更新博文,因此,今天就花了点时间,写了本篇文章,但愿大家喜欢. 本篇文章不适合初学者,需要对ASP.NET MVC具有一定基础. 本篇文章主要从ASP.NE ...
随机推荐
- Web服务中延时对QoE(体验质量)的影响
S. Egger等人在论文<WAITING TIMES IN QUALITY OF EXPERIENCE FOR WEB BASED SERVICES>中,研究了Web服务中延时对主观感受 ...
- Opencv学习笔记------Harris角点检测
image算法测试iteratoralgorithmfeatures 原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/73 ...
- 《java入门第一季》之面向对象综合小案例
需求: /* 教练和运动员案例 乒乓球运动员和篮球运动员. 乒乓球教练和篮球教练. 跟乒乓球相关的人员都需要学习英语. 分析,这 ...
- C#之面向对象的特性
类是一种抽象的数据类型,但是其抽象的程度有可能会不同,而对象就是一个类的实例,例如,将花设计为一个类,天堂鸟和矢车菊就可以各为一个对象,从这里我们可以看出来,天堂鸟和矢车菊 ...
- Cocos2D的平台检查宏
为了避免在非iOS平台包含UIKit.h文件,需要在Prefix.pch文件中添加一个条件判断: #if __CC_PLATFORM_IOS #import <UIKit/UIKit.h> ...
- AngularJS进阶(二十三)ANGULAR三宗罪之版本陷阱
ANGULAR三宗罪之版本陷阱 坑!碰到个大坑,前面由于绑定日期时将angular版本换为angular-1.3.0-beta.1时,后来午睡后,登录系统,发现无论如何都登陆不进去了,经过调试,发现数 ...
- Android SDK下载失败的解决方法
Android SDK下载失败的解决方法 图1 在下载过程中,Android SDK Manager Log中出现下面出错信息: Preparing toinstall archives Downlo ...
- Leetcode_202_Happy Number
+ 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1 思路: (1)题意为判断给定的整数是否为一个"快乐的数",所谓快乐的数需 ...
- win32 线程通信初步
// 线程通信机制.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #define NUM_THREADS 10 #include < ...
- 任务管理器中的PID找不到
PID是Process ID的简称,这对WINDOWS开发人员来说是非常有用的信息,但对于普通用户来说则根本不必去理会. 举个例子来说: 在网站发布的时候,需要安装IIS,那么iis的tcp的80 ...