基于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 ...
随机推荐
- Volley学习小结
1.概述 volley英文即是"齐射,并发",是谷歌在2013年推出的网络通信库,有如下特点: [1]通信更快,更简单 [2]Get.Post网络请求以及网络数据图像的高效的异步请 ...
- OC中的枚举类型
背景 一直对OC中的位移操作枚举不太理解,查找到两篇介绍OC中枚举的文章,觉得很不错. 什么是位移操作枚举呢? typedef NS_OPTIONS(NSUInteger, UIViewAutores ...
- C语言中数组转化为字符串的方法
#include<stdio.h> #include <stdlib.h> #include <string.h> #define NR(x) (sizeof(x) ...
- Material Design5.x动画实现解析篇一
Material Design设计语言动画篇共推出六种类型的动画效果: 1.Touch feedback(触摸反馈) 2.Reveal effect(揭露效果) 3.Activity transiti ...
- android JNI调用机制
JNI的出现使得开发者既可以利用Java语言跨平台.类库丰 富.开发便捷等特点,又可以利用Native语言的高效. JNI是JVM实现中的一部分,因此Native语言和Java代码都运行在JVM的宿主 ...
- android https安全连接
如果不需要验证服务器端证书,直接照这里做 [java] view plaincopy public class Demo extends Activity { /** Called when the ...
- HBase flush
flush触发方式 1. Server端执行更新操作(put.delete.multi(MultiAction<R>multi).(private)checkAndMutate.mutat ...
- navicat for mysql远程连接ubuntu服务器的mysql数据库
经常玩服务器上的mysql数据库,但是基于linux操作Mysql多有不便,于是就想着使用GUI工具来远程操作mysql数据库.已经不是三次使用navicat-for-mysql了,但是每次连接远程服 ...
- 一个你不能错过的第三方.net集合库
今天查找资料的时候,偶然发现了一个第三方的面向.net的集合类库,相比较FCL中的集合类,此第三方集合类库更全,最基本的Set数据结构在FCL里面是没有的,但是这个类库里面有,而且此类库的作者就是&l ...
- 如何让DIV中的文字垂直居中
var h = $("div").innerHeight(); $("#text").css("font-size", h); $(&quo ...