微信第三方登陸(靜默受權和非靜默受權)

用戶在微信客戶端中訪問第三方網頁,公衆號能夠經過微信網頁受權機制,來獲取用戶基本信息,進而實現業務邏輯。php

微信的受權登陸在平常應用中應用的很是普遍,愈來愈多的平臺支持用戶使用微信進行受權第三方登陸html

 使用微信受權登陸有哪些優點/好處;前端

 一、用戶量足夠大,基本全部用戶都會有微信,登陸起來比較方便快捷;數據庫

 二、微信做爲一個開放平臺,爲衆多公衆號/服務開放了許多服務接口,讓公衆號可以爲本身的用戶提供更加個性、更加優質的產品服務;api

open id 和 union id ,這兩個id有什麼區別;微信

一、open id:在關注者與公衆號產生消息交互後,公衆號可得到關注者的open id, 同一個用戶,在不一樣公衆號或移動應用下對應有不一樣open id標識;app

二、 union id:同一個用戶,在不一樣公衆號或移動應用下unionID相同;前提是,如若須要作多個公衆號以及移動應用帳戶互通,獲得惟一身份標識union id,則須要將多個公衆號或移動應用在微信開放平臺進行綁定,而後咱們才能給拿到union id;網站

因此,若是某個應用或者服務,有聯合登陸甚至多個公衆應用多帳戶互通,能夠採用union id來進行帳戶體系的用戶識別與合併;即微信平臺能夠經過union id 來進行基於多個公衆號之間的帳戶體系互通與識別合併;url

 微信聯合登陸是怎麼登陸的,有幾種登陸方式;微信聯合登陸和微信受權登陸【受權登陸(非靜默受權)與靜默受權spa

微信聯合登陸;也就是咱們經常使用的微信移動端/PC端之間的掃碼登陸,PC端用微信掃碼登陸,微信移動端確認受權登陸後,應用能夠從微信拿到用戶的open id或union id,將微信獲取的用戶信息與本身帳戶體系中的用戶身份進行關聯;

受權登陸:須要用戶確認登陸,這樣能夠經過用戶的我的確認,獲取用戶全面的信息,不管是否關注相關微信公衆號等均可以獲取。

靜默受權不須要用戶確認,只須要用戶訪問某個網頁,屬於嵌套在普通網頁裏的受權形式,可是隻能獲取到用戶的惟一標示openid和union id,沒法拿到用戶的微信頭像、微信名稱等我的信息,對於用戶的簡單認證仍是頗有用的。

 如何經過微信帳戶體系來作多應用、多平臺之間的帳戶互通體系;若是某個服務同時分佈在多個公衆號中,帳戶體系如何創建;如何作到用戶身份惟一識別;

1)、同一用戶不一樣公衆號/應用下open id不一樣,同一用戶不一樣公衆號/應用下unionid相同;

2)、創建應用帳戶體系時,經過union來進行多應用/平臺之間的用戶帳戶體系識別與合併;

3)、多應用/平臺創建帳戶體系時,須要作到惟一user id對應惟一union id;

某個服務,包括移動app端、PC網頁端、公衆號端服務,那麼用戶使用微信受權登陸的數據流轉流程是怎麼樣的;

一、用戶經過微信受權移動app服務;該應用服務便可經過接口獲取用戶的union id,這個時候,若是在數據庫中沒有查到該id,則識別爲新用戶,直接建立一個user id,該惟一user id與union id 對應;

二、用戶經過微信掃碼PC端受權聯合登錄獲取PC端服務;該應用服務便可經過接口獲取用戶的union id,這個時候,在數據庫中查到有這個id,就會把pc登陸這個帳戶合併到以前建立的惟一user id帳戶下;

三、用戶經過關注該服務公衆號,用微信受權登陸公衆號服務;該應用服便可經過接口獲取用戶的union id,這個時候,在數據庫中查到有這個id,就會把公衆號中登陸的這個帳戶合併到以前建立的惟一user id帳戶下;

 網頁受權的兩種scope的區別說明:

一、受權登陸以snsapi_base爲scope發起的網頁受權,是用來獲取進入頁面的用戶的openid的,而且是靜默受權並自動跳轉到回調頁的。用戶感知的就是直接進入了回調頁(每每是業務頁面)特色:用戶無感知;

二、靜默受權以snsapi_userinfo爲scope發起的網頁受權,是用來獲取用戶的基本信息的。但這種受權須要用戶手動贊成,而且因爲用戶贊成過,因此無須關注,就可在受權後獲取該用戶的基本信息。 

特殊場景下靜默受權:

對於已關注公衆號的用戶,若是用戶從公衆號的會話或者自定義菜單進入本公衆號的網頁受權頁,即便是scope爲snsapi_userinfo,也是靜默受權,用戶無感知。 

網頁受權流程:

一、引導用戶進入受權頁面贊成受權,獲取code 

確保微信公衆帳號擁有受權做用域(scope參數)的權限的前提下引導用戶去受權頁面

參考連接:

scope爲snsapi_base

注意:appid,redirect_uri,state這些要和後臺協商好

https://open.weixin.qq.com/connect/oauth2/authorize?appid="+wx_appid+"&redirect_uri="+api.wx_reg+"&response_type=code&scope=snsapi_login,snsapi_userinfo&state=1,0#wechat_redirect

scope爲snsapi_userinfo 

https://open.weixin.qq.com/connect/oauth2/authorize?appid="+wx_appid+"&redirect_uri="+api.wx_reg+"&response_type=code&scope=snsapi_base,snsapi_userinfo&state=1,0#wechat_redirect

用戶贊成受權後

若是用戶贊成受權,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE。

二、經過code換取網頁受權access_token(後臺操做)(以前是php中間作了一步中轉操做經過code換取網頁受權access_token這步是後臺操做

 頁面跳回跳的url上redirect_uri/?code=CODE&state=STATE。code

經過code換取的是網頁受權access_token,若是網頁受權的做用域爲snsapi_base,則本步驟中獲取到網頁受權access_token的同時,也獲取到了openid,snsapi_base式的網頁受權流程即到此爲止。

3:須要我的信息。後臺經過code獲得值以後返回給前端去操做

二、經過code換取網頁受權access_token(前端操做)

window.location.href="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+wx_appid+"&redirect_uri="+encodeURIComponent("+中轉頁面的html好比 location.html+")+"&response_type=code&scope=snsapi_base,snsapi_userinfo&state="+wx_rt_url_code(前端本身判斷,存儲,目的是肯定受權頁面來源。以方便受權後跳回的頁面地址)+",1(這值是和後臺協商)#wechat_redirect";

3:location.html頁面受權後會跳轉到這個頁面。同時在頁面url?後參數中拿到code 和 state 的值 (state就是上面傳入的)

就能夠拿着這兩個參數去進行登陸操做。獲取相應的token ,wxUserToken 等須要的信息 。根據 wx_rt_url_code本身定義個規則迴轉到相應的頁面。完成登陸狀態。進行下一步操做

爲了確保參數的正確傳入,state能夠進行decodeURIComponent下。(以前調接口的時候程序報錯,發現pc端受權登陸的時候微信解析是有逗號,手機端state是沒逗號,確保程序的正常運行能夠進行解碼下)

網站的微信受權登陸是以二維碼的形式 api網址 api https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN

手機端微信受權登陸api網址 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=&lang=zh_CN

相關文章
相關標籤/搜索