微信授權掃碼登陸
微信開放平台提供了兩種登陸方式,一種是會跳轉到一個很丑很丑,只有一個二維碼的界面里;
另一種則是可以自己定制化的(二維碼內嵌到自己網站內的方式)
第一種方式的完成非常簡單,但是第二種方式,就需要前后台都做一些調整了
微信掃碼登陸的准備工作 這是在開始做相關業務開發之前的一些東西
- 去微信開放平台中注冊一個賬號,並完成自己的開發者資質認證(這個鏈接應該點不過去,他們token是明文存在地址欄里的....),開發者資質認證要花 300塊錢,可以綁定10個移動應用程序和10個網站應用上(還有公眾號、小程序和第三方平台,這些不是主體內容,不做說明)。
- 創建網站應用,這些東西按照流程走就好了
- 網站應用創建並審批完之后可以直接查看該應用,里面有
AppID和AppSecret,用小本本記好,未來要用的 - 接口信息里有一個微信登陸,申請開通即可(沒有走第一步的可能會提示要認證,老老實實把第一步內容走了吧,該花的錢...讓老板報銷去吧)
- 授權回調域,這個東西填寫自己網站(處理掃碼登陸相關業務的)后台域名地址,如果后台沒有跑在80端口,則需要在里面指定端口號,只要填寫頂級域名即可(
arunoido.com:411/)(格式有問題的話,在實際操作可能會提示redirect_uri參數錯誤)子級域名自動繼承
操作流程
官方文檔里已經給了一套非(shi)常(fen)明(mo)確(hu)的操作手冊了,這里貼上文章鏈接
整體的代碼流程如下(說的有一點點抽象,有一個宏觀意識就好,不要太專注於某一個地方的實現,后面會說):
- 前台界面生成二維碼,同時開啟輪詢,每隔一段時間(時間你定)去查看用戶登陸狀況
- 用戶用微信掃描二維碼,進入了該網站的授權界面
- 前台收到了確認,向后台發起請求,攜帶
code和state - 后台用code請求微信接口,拿到
access_token等一系列信息(我是僅作登陸的,所以拿了一個union_id,如果需要的話,可以用access_token換取一些微信用戶的信息,然后就可以干一些猥瑣的事情了,比如.....比如把別人的微信頭像存到自己的數據庫里!),將union_id存入redis中,key使用微信提供的state - 前台在輪詢過程中會拿到后台返回的結果,沒有綁定的跳轉登陸界面綁定,有綁定的直接進入
- (綁定流程)前台賬號密碼發送到后台,后台完成綁定
代碼處理
前台處理
- 微信提供了一個js文件用於生成二維碼以及發送請求並完成界面重定向,使用即可,具體說法在官方文檔中請求示例下面 步驟一、二,按照文檔填寫內容即可(注:
redirect_uri參數填寫后台微信掃碼登陸的接口地址) - 修改登陸界面,在選擇掃碼登陸之后,判斷是否綁定賬號,如果綁定賬號,則用該賬號登陸;如果未綁定賬號,則需要登陸賬號完成微信號的綁定/注冊(注:這里要修改一下,傳統的登陸是后台響應前台請求,因為掃碼結果的回調是被包裝過的(微信登陸的那個js里有相關的請求以及響應代碼,但是他們沒有解釋里面的接口,代碼也是壓縮過的,不方便查看接口方法,所以我也沒有把它做成響應的),所以需要去輪詢掃碼結果,判斷登陸狀態)
- 添加新的接口請求(狀態請求接口)
后台處理
- 增加三個接口,微信掃碼登陸,微信賬號綁定和一個查詢響應狀況的功能
- 微信掃碼登陸接口使用
GET方法,參數有code和state,返回值為void - 用
code請求union_id,並將union_id存入redis中備用,key使用state參數 - 查詢響應接口使用
POST方法,接受參數為state,用於查詢union_id,數據為空說明請求超時,有數據但是在數據庫中查詢不到則說明用戶未綁定,有數據且查詢到了用戶,可以直接調用后台的登陸接口,然后返回token。 - 微信賬號綁定使用
POST方法,參數有state、acc和pwd。用於掃碼登陸的后半段,用戶掃碼完成之后輸入賬號密碼,賬號密碼正確且能查出union_id,完成綁定,並調用賬號密碼的登陸接口,返回token。
我一直都誤解了微信掃碼登陸模塊的流程惹...
