首先咱们先看下公众号的文档里面的介绍
上述图片的文字描述就是讲述了网页授权有什么用,就是为了获取微信用户的基本信息;授权回调域名的规范,说到域名回调的事情就不得不提一下设置网页授权域名
最好将这三个域名设置好,以防自己要用的时候忽略的这三个小东西。
好了域名设置好了,之后咱们再来看看网页授权的流程
第一步:咱们先通过接口让用户同意授权获取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。所以楼主这边只是为了提个醒,以防你们以后用到这个会吹亏(我就是掉过这个坑)。所以大家就留一点心,留个口子就行了(就先加个字段呗,多大点事儿)。
以上就是网页授权一些概述。。。。