

準(zhǔn)備工作
配置網(wǎng)頁授權(quán)獲取用戶基本信息,用于告訴微信發(fā)起授權(quán)的后端服務(wù)器地址
正式公眾號(hào):在微信公眾號(hào)請(qǐng)求用戶網(wǎng)頁授權(quán)之前,開發(fā)者需要先到公眾平臺(tái)官網(wǎng)中的“開發(fā) - 接口權(quán)限 - 網(wǎng)頁服務(wù) - 網(wǎng)頁帳號(hào) - 網(wǎng)頁授權(quán)獲取用戶基本信息”進(jìn)行配置操作;
測(cè)試沙箱環(huán)境:在 測(cè)試環(huán)境 中,進(jìn)行配置網(wǎng)頁授權(quán)(https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index)。可配置端口號(hào)用于本地調(diào)試。?注:勿加 http:// 等協(xié)議頭!
本次業(yè)務(wù)我們配置的是前端登錄頁面,沙箱中內(nèi)配置的網(wǎng)頁授權(quán)域名為本地https起的服務(wù)器域名(test.c3data.com.cn:3000)

授權(quán)說明
微信授權(quán)時(shí),分為snsapi_base和snsapi_userinfo兩種授權(quán)方式。本次我們的需求第一種snsapi_base即可滿足。
1、snsapi_base: 用來獲取進(jìn)入頁面的用戶的 openid 的,并且是靜默授權(quán)并自動(dòng)跳轉(zhuǎn)到回調(diào)頁的。用戶感知的就是直接進(jìn)入了回調(diào)頁(往往是業(yè)務(wù)頁面,不會(huì)有對(duì)于的認(rèn)為操作);
2、snsapi_userinfo: 是用來獲取用戶的基本信息的。但這種授權(quán)需要用戶手動(dòng)同意,并且由于用戶同意過,所以無須關(guān)注,就可在授權(quán)后獲取該用戶的基本信息。
網(wǎng)頁授權(quán)流程:
1、引導(dǎo)用戶進(jìn)入授權(quán)頁面同意授權(quán),獲取code
2、通過 code 換取網(wǎng)頁授權(quán)access_token(與基礎(chǔ)支持中的access_token不同)和openid
3、通過網(wǎng)頁授權(quán)access_token和 openid 獲取用戶基本信息(支持 UnionID 機(jī)制)
網(wǎng)頁授權(quán)詳細(xì)流程:
1.在用戶從公眾號(hào)進(jìn)入系統(tǒng)的時(shí)候,引導(dǎo)關(guān)注者打開如下頁面,獲取code:
由于授權(quán)操作安全等級(jí)較高,所以在發(fā)起授權(quán)請(qǐng)求時(shí),微信會(huì)對(duì)授權(quán)鏈接做正則強(qiáng)匹配校驗(yàn),如果鏈接的參數(shù)順序不對(duì),授權(quán)頁面將無法正常訪問;鏈接屬性如下:

用戶同意授權(quán)后,頁面將跳轉(zhuǎn)至 redirect_uri/?code=CODE&state=STATE
1、code作為換取access_token的票據(jù),每次用戶授權(quán)帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動(dòng)過期。
2、微信重定向回調(diào)地址,一定要在微信公眾號(hào)平臺(tái)進(jìn)行配置,為后端接口地址。(本次業(yè)務(wù)我們配置的是前端登錄頁面,沙箱中內(nèi)配置的網(wǎng)頁授權(quán)域名為本地https起的服務(wù)器域名(test.c3data.com.cn:3000))。
2.通過code換取網(wǎng)頁授權(quán)access_token(后端進(jìn)行)
首先請(qǐng)注意,這里通過code換取的是一個(gè)特殊的網(wǎng)頁授權(quán)access_token,與基礎(chǔ)支持中的access_token(該access_token用于調(diào)用其他接口)不同。公眾號(hào)可通過下述接口來獲取網(wǎng)頁授權(quán)access_token。如果網(wǎng)頁授權(quán)的作用域?yàn)閟nsapi_base,則本步驟中獲取到網(wǎng)頁授權(quán)access_token的同時(shí),也獲取到了openid,snsapi_base式的網(wǎng)頁授權(quán)流程即到此為止。
尤其注意:由于公眾號(hào)的secret和獲取到的access_token安全級(jí)別都非常高,必須只保存在服務(wù)器,不允許傳給客戶端。后續(xù)刷新access_token、通過access_token獲取用戶信息等步驟,也必須從服務(wù)器發(fā)起。
獲取code后,請(qǐng)求以下鏈接(該接口就是第一步中定義的redirect_uri值,即后端接口地址,微信重定向時(shí)會(huì)進(jìn)行調(diào)用)獲取access_token:
獲取code后會(huì)攜帶code參數(shù)自動(dòng)重定向到登錄頁面,此時(shí)用code請(qǐng)求后端接口,后端用code換取用戶的openid,并返回至前端。


注意:測(cè)試環(huán)境和正式環(huán)境的appId和appSecret是不同的,前后端的測(cè)試及正式環(huán)境需要配置一致,才能拿到微信用戶信息。(前端在測(cè)試環(huán)境拿到code傳給后端,后端只能在appId和secret為測(cè)試的配置中換取openId,否則會(huì)報(bào)錯(cuò))