背景
用戶在微信客戶端中訪問第三方網(wǎng)頁匈仗,公眾號(hào)可以通過微信網(wǎng)頁授權(quán)機(jī)制逞度,來獲取用戶基本信息供炎,進(jìn)而實(shí)現(xiàn)業(yè)務(wù)邏輯渴逻。
配置
在微信公眾號(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)獲取用戶基本信息”的配置選項(xiàng)中碱茁,修改授權(quán)回調(diào)域名裸卫。請(qǐng)注意,這里填寫的是域名(是一個(gè)字符串)纽竣,而不是URL墓贿,因此請(qǐng)勿加 http:// 等協(xié)議頭;
授權(quán)回調(diào)域名配置規(guī)范為全域名蜓氨,比如需要網(wǎng)頁授權(quán)的域名為:www.qq.com聋袋,配置以后此域名下面的頁面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以進(jìn)行OAuth2.0鑒權(quán)穴吹。但http://pay.qq.com 幽勒、 http://music.qq.com 、 http://qq.com無法進(jìn)行OAuth2.0鑒權(quán)
兩種授權(quán)方式
微信提供了兩種授權(quán)方式來應(yīng)對(duì)不同的使用場景港令。通過網(wǎng)頁授權(quán)作用域 scope
參數(shù)控制啥容。
靜默授權(quán)
-
靜默授權(quán):用戶進(jìn)入頁面后自動(dòng)授權(quán)并跳轉(zhuǎn)回頁面锈颗,這種授權(quán)對(duì)用戶無感知。通過這種授權(quán)我們只能獲取到用戶的
openid
咪惠,無法獲得用戶的其他信息击吱。 - 使用場景:只需要標(biāo)識(shí)該用戶,而不需要收集其他信息的場景都可以使用遥昧。比如投票覆醇、點(diǎn)贊等場景。
scope: snsapi_base
主動(dòng)授權(quán)
- 主動(dòng)授權(quán):用戶進(jìn)入頁面后會(huì)有授權(quán)彈窗炭臭,需要手動(dòng)同意永脓。該方試用來獲取用戶的基本信息
- 注意:對(duì)于已關(guān)注公眾號(hào)的用戶,用戶從公眾號(hào)的會(huì)話或者自定義菜單進(jìn)入本公眾號(hào)的網(wǎng)頁授權(quán)頁鞋仍,即使是
scope: snsapi_userinfo
常摧,也是靜默授權(quán),用戶無感知威创。 scope: snsapi_userinfo
具體流程
- 用戶進(jìn)入頁面排宰,獲取
code
- 通過
code
換取網(wǎng)頁授權(quán)access_token
和openid
,靜默授權(quán)到這步結(jié)束 - 通過
access_token
獲取用戶信息
獲取CODE
引導(dǎo)用戶跳傳至該鏈接
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE
用戶同意授權(quán)或靜默授權(quán)后將跳轉(zhuǎn)至 redirect_url?code=CODE&state=STATE
這個(gè)地址并帶上生成的 code
那婉。
code
作為換取access_token
的票據(jù)板甘,只能使用一次,5分鐘未使用自動(dòng)過期详炬。
參數(shù)說明
通過 code
換取網(wǎng)頁授權(quán) access_token
注意盐类,這里的 access_token
和 調(diào)用公眾平臺(tái)API所需的基礎(chǔ) access_token
不是一個(gè)東東,只是名字一樣而已呛谜。
這一步是在服務(wù)端完成的在跳,需要公眾號(hào)的 secret
,access_token
也不可以傳給客戶端隐岛。
請(qǐng)求接口
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
返回
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
拉取用戶信息(需scope為snsapi_userinfo)
當(dāng)網(wǎng)頁授權(quán)作用域?yàn)?snsapi_userinfo
時(shí)猫妙,開發(fā)者通過 access_token
和 openid
獲取用戶信息。
請(qǐng)求接口
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
返回
{
"openid": "OPENID",
"nickname": "NICKNAME",
"sex": "1",
"province": "PROVINCE"
"city": "CITY",
"country": "COUNTRY",
"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege": [ "PRIVILEGE1" "PRIVILEGE2" ],
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}