微信網頁受權

背景

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

配置

  1. 在微信公衆號請求用戶網頁受權以前,開發者須要先到公衆平臺官網中的「開發 - 接口權限 - 網頁服務 - 網頁賬號 - 網頁受權獲取用戶基本信息」的配置選項中,修改受權回調域名。請注意,這裏填寫的是域名(是一個字符串),而不是URL,所以請勿加 http:// 等協議頭;json

  2. 受權回調域名配置規範爲全域名,好比須要網頁受權的域名爲:www.qq.com,配置之後此域名下面的頁面www.qq.com/music.htmlwww.qq.com/login.html 均可以進行OAuth2.0鑑權。但pay.qq.commusic.qq.comqq.com沒法進行OAuth2.0鑑權api

兩種受權方式

微信提供了兩種受權方式來應對不一樣的使用場景。經過網頁受權做用域 scope 參數控制。bash

靜默受權

  1. 靜默受權:用戶進入頁面後自動受權並跳轉回頁面,這種受權對用戶無感知。經過這種受權咱們只能獲取到用戶的 openid,沒法得到用戶的其餘信息。
  2. 使用場景:只須要標識該用戶,而不須要收集其餘信息的場景均可以使用。好比投票、點贊等場景。
  3. scope: snsapi_base

主動受權

  1. 主動受權:用戶進入頁面後會有受權彈窗,須要手動贊成。該方試用來獲取用戶的基本信息
  2. 注意:**對於已關注公衆號的用戶,**用戶從公衆號的會話或者自定義菜單進入本公衆號的網頁受權頁,即便是scope: snsapi_userinfo,也是靜默受權,用戶無感知。
  3. scope: snsapi_userinfo

具體流程

  1. 用戶進入頁面,獲取 code
  2. 經過 code 換取網頁受權 access_tokenopenid,靜默受權到這步結束
  3. 經過 access_token 獲取用戶信息

獲取CODE

引導用戶跳傳至該連接微信

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATEapp

用戶贊成受權或靜默受權後將跳轉至 redirect_url?code=CODE&state=STATE 這個地址並帶上生成的 codeurl

code 做爲換取access_token的票據,只能使用一次,5分鐘未使用自動過時。spa

參數說明3d

經過 code 換取網頁受權 access_token

注意,這裏的 access_token調用公衆平臺API所需的基礎 access_token不是一個東東,只是名字同樣而已。code

這一步是在服務端完成的,須要公衆號的 secretaccess_token 也不能夠傳給客戶端。

請求接口

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)

當網頁受權做用域爲 snsapi_userinfo時,開發者經過 access_tokenopenid 獲取用戶信息。

請求接口

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"
}
複製代碼

參考資料

微信網頁受權官方文檔

相關文章
相關標籤/搜索