基于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 ...
随机推荐
- 中国梦 每个农大人的梦
历经百年风霜,苦经岁月沧桑.农大,一个中原沃土上生长起来的大树,它在用它那不倒的生命力展示着农大的顽强与坚持,而这份苍劲和顽强,却来自于每个农大人,来自于他们的梦想,来自于他们的坚持,来自于他们的努力 ...
- [Ext.Net]动态生成控件(二)--js动态添加文本框
转自:http://www.ext.net.cn/forum.php?mod=viewthread&tid=11931 点击一个按钮就出现一行控件,点击删除控件就可将一行控件删除,这是不是你一 ...
- TCP 的那些事儿(上)(转)
本文转载自陈皓博文TCP 的那些事儿(上). TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多 ...
- 服务端技术进阶(二)JBoss和tomcat的区别
JBoss和tomcat的区别 注意JBoss和tomcat是不一样,JBoss是一个可伸缩的服务器平台,当你的EJB程序编制完成后,如果访问量增加,只要通过增加服务器硬件就可以实现多台服务器同时运算 ...
- JFinal开发环境搭建,JFinal开发案例
JFinal 是基于 Java 语言的极速 WEB + ORM 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java 语言所 ...
- OpenCV——照亮边缘
具体的算法原理可以参考: PS滤镜,照亮边缘 // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_ ...
- hadoop分布式安装部署详细视频教程(网盘附配好环境的CentOS虚拟机文件/hadoop配置文件)
参考资源下载:http://pan.baidu.com/s/1ntwUij3视频安装教程:hadoop安装.flvVirtualBox虚拟机:hadoop.part1-part5.rarhadoop文 ...
- gcc或clang中消除特定警告的方法
一般在编译代码时会有相当多的警告信息,尤其当我们使用了-Wall选项的时候.-Wall绝不是像其字面意思一样打开所有警告.不过它打开的警告也相当多了.对于一些我们已知"无害"但仍然 ...
- (function(){xxx})(); 写法解释
常见格式:(function() { /* code */ })(); 解释:包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数,括号内为匿 ...
- java main方法执行sql语句
public static void main(String[] args) throws Exception{ String driver = "oracle.jdbc.driver.Or ...