首先咱們先看下公眾號的文檔里面的介紹
上述圖片的文字描述就是講述了網頁授權有什么用,就是為了獲取微信用戶的基本信息;授權回調域名的規范,說到域名回調的事情就不得不提一下設置網頁授權域名
最好將這三個域名設置好,以防自己要用的時候忽略的這三個小東西。
好了域名設置好了,之后咱們再來看看網頁授權的流程
第一步:咱們先通過接口讓用戶同意授權獲取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。所以樓主這邊只是為了提個醒,以防你們以后用到這個會吹虧(我就是掉過這個坑)。所以大家就留一點心,留個口子就行了(就先加個字段唄,多大點事兒)。
以上就是網頁授權一些概述。。。。