首先咱们先看下公众号的文档里面的介绍

上述图片的文字描述就是讲述了网页授权有什么用,就是为了获取微信用户的基本信息;授权回调域名的规范,说到域名回调的事情就不得不提一下设置网页授权域名

最好将这三个域名设置好,以防自己要用的时候忽略的这三个小东西。

好了域名设置好了,之后咱们再来看看网页授权的流程

第一步:咱们先通过接口让用户同意授权获取code

scope=snsapi_base这个时候,就相当于我们默认用户同意授权,但由于不是用户自己确认的授权,所以只能获取用户的openid,不能获取用户的一些基本信息;

第二步:通过code获取access_token

第三步与第四步第五步,是给有需要的使用。因为我们这边是只需要获取到用户的openid即可,也不需要用户的基本信息,所以就不详细讲了。当初由于因为这些接口涉及到跳转页面,所以当初想怎么简单怎么来,就运用aspx的后台可以很快实现这些比较复杂的逻辑。

 /// <summary>
/// 通过授权跳转页面
/// </summary>
/// <param name="url"></param>
/// <param name="state"></param>
/// <returns></returns>
public static string GetAuthorize(string url)
{
var state = Guid.NewGuid().ToString().Replace("-", "").ToLower();
HttpContext.Current.Session["weixin_state"] = state;
var urlencode = HttpContext.Current.Server.UrlEncode(url);
return string.Format(@"https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect"
, _appid, urlencode, state);
} /// <summary>
/// 通过code获取会员登录微信实体
/// </summary>
/// <param name="code"></param>
/// <param name="state"></param>
/// <returns></returns>
public static AccessTokenCallBack GetAccessTokenByCode(string code, string state)
{
AccessTokenCallBack accessTokenCallBack = null;
if (!string.IsNullOrEmpty(code) && !string.IsNullOrEmpty(state) && (HttpContext.Current.Session["weixin_state"] + "") == HttpContext.Current.Server.UrlDecode(state))
{
try
{
var resJson = SendHttpGet(string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", _appid, _secret, HttpContext.Current.Server.UrlDecode(code)));
accessTokenCallBack = JsonConvert.DeserializeObject<AccessTokenCallBack>(resJson);
}
catch (Exception ex)
{
LogHelper.WriteLog(typeof(WeChatHelper), ex, Level.Error);
}
}
return accessTokenCallBack;
} /// <summary>
/// HTTPget请求
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string SendHttpGet(string url)
{
using (WebClient client = new WebClient() { Encoding = System.Text.Encoding.UTF8 })
{
return client.DownloadString(url);
}
}

(现在看起来都想把这些代码重构一下,都不知道自己怎么写成这个样子的。。。)我就忍一下吧,_appid, _secret这两个就是微信开发者所必须保存到配置文件的东西。。。

这样我们就可以通过openid将微信的用户与我们系统里面的会员所关联,但是值得注意的是如果你们后期还有什么微信开放平台微信登录等。这时候就要注意到一个叫UnionID的东西。文档是这样给出的解释:

1、请注意,网页授权获取用户基本信息也遵循UnionID机制。即如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。

2、UnionID机制的作用说明:如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。

但是只有在拥有开放平台的账号以及在开放平台上绑定公众号的时候,才会出现UnionID。所以楼主这边只是为了提个醒,以防你们以后用到这个会吹亏(我就是掉过这个坑)。所以大家就留一点心,留个口子就行了(就先加个字段呗,多大点事儿)。

以上就是网页授权一些概述。。。。

C#开发微信公众号——网页开发之微信网页授权的更多相关文章

  1. C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

    一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...

  2. 微信公众号支付开发全过程 --JAVA

    按照惯例,开头总得写点感想 ------------------------------------------------------------------ 业务流程 这个微信官网说的还是很详细的 ...

  3. 到处是坑的微信公众号支付开发(java)

    之前公司项目开发中支付是用阿里的支付做的,那叫一个简单,随意:悲催的是,现在公司开发了微信公众号,所以我步入了全是坑的微信支付开发中... ------------------------------ ...

  4. PHP微信公众号后台开发(Yii2实现)

    本文内容较多,包括微信接入.获取微信用户信息.微信支付.JSSDK配置参数获取等部分.如果读者对微信开发没有一个主观上的认识,那么建议读者先研读微信公众平台开发者文档,然后再阅读本文,效果更佳!另外本 ...

  5. C#/ASP.NET MVC微信公众号接口开发之从零开发(四) 微信自定义菜单(附源码)

    C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...

  6. C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)

    文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们 ...

  7. C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)

    C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发( ...

  8. Java开发微信公众号(五)---微信开发中如何获取access_token以及缓存access_token

    获取access_token是微信api最重要的一个部分,因为调用其他api很多都需要用到access_token.比如自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等在请求的时候 ...

  9. Java开发微信公众号(四)---微信服务器post消息体的接收及消息的处理

    在前几节文章中我们讲述了微信公众号环境的搭建.如何接入微信公众平台.以及微信服务器请求消息,响应消息,事件消息以及工具处理类的封装:接下来我们重点说一下-微信服务器post消息体的接收及消息的处理,这 ...

  10. Java开发微信公众号(三)---微信服务器请求消息,响应消息,事件消息以及工具处理类的封装

    在前面几篇文章我们讲了微信公众号环境的配置 和微信公众号服务的接入,接下来我们来说一下微信服务器请求消息,响应消息以及事件消息的相关内容,首先我们来分析一下消息类型和返回xml格式及实体类的封装. ( ...

随机推荐

  1. MIUI 的参与感

    最近这段时间在看小米联合创始人黎万强写的<参与感>这本书,看完我还挺有感触的.小米相信大家都一定有所耳闻. 2010 年 4 月 6 日            小米公司正式创立. 8 月 ...

  2. 【剑指Offer】65、矩阵中的路径

      题目描述:   请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经 ...

  3. Xpath语法与lxml库

    1. Xpath 1 )什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. 2) X ...

  4. Ubuntu 18.04 nvidia driver 390.48 安装 TensorFlow 1.12.0 和 PyTorch 1.0.0 详细教程

    最近要在个人台式机上搭建TensorFlow和PyTorch运行环境,期间遇到了一些问题.这里就把解决的过程记录下来,同时也可以作为安装上述环境的过程记录. 如果没有遇到类似的问题,想直接从零安装上述 ...

  5. 非递归全排列 python实现

    python algorithm 全排列(Permutation) 排列(英语:Permutation)是将相异物件或符号根据确定的顺序重排.每个顺序都称作一个排列.例如,从一到六的数字有720种排列 ...

  6. assign retain 和copy的区别

    assign 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char)等 等. 此标记说明设置器直接进⾏行赋值,这也是默认值.在使⽤用垃圾 ...

  7. web项目log日志查看分析->流程理解

    1.DEBUG [2017-07-10 11:38:41,705][] org.springframework.web.servlet.DispatcherServlet:865 - Dispatch ...

  8. C语言实现的lisp解析器介绍

    近期.由于Perl而学习函数式编程, 再进一步学习lisp, 真是一学习就发现自己的渺小. 无意中找到了一个很easy的C语言版的, lisp解析器. 代码非常短, 却非常见功底, 涨姿势了. 附带还 ...

  9. HDU4638:Group(线段树离线处理)

    Problem Description There are n men ,every man has an ID(1..n).their ID is unique. Whose ID is i and ...

  10. Deep Learning Toolboxs

    一些好用的 Deep learning toolboxs DeepLearningToolbox MATLAB实现,能够使用CPU或GPU.GPU运算用gpumat实现.改动内核代码很方便 支持主要的 ...