微信網頁授權


背景

用戶在微信客戶端中訪問第三方網頁,公眾號可以通過微信網頁授權機制,來獲取用戶基本信息,進而實現業務邏輯。

配置

  1. 在微信公眾號請求用戶網頁授權之前,開發者需要先到公眾平台官網中的“開發 - 接口權限 - 網頁服務 - 網頁帳號 - 網頁授權獲取用戶基本信息”的配置選項中,修改授權回調域名。請注意,這里填寫的是域名(是一個字符串),而不是URL,因此請勿加 http:// 等協議頭;

  2. 授權回調域名配置規范為全域名,比如需要網頁授權的域名為:www.qq.com,配置以后此域名下面的頁面http://www.qq.com/music.htmlhttp://www.qq.com/login.html 都可以進行OAuth2.0鑒權。但http://pay.qq.comhttp://music.qq.comhttp://qq.com無法進行OAuth2.0鑒權

兩種授權方式

微信提供了兩種授權方式來應對不同的使用場景。通過網頁授權作用域 scope 參數控制。

靜默授權

  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=STATE

用戶同意授權或靜默授權后將跳轉至 redirect_url?code=CODE&state=STATE 這個地址並帶上生成的 code

code 作為換取access_token的票據,只能使用一次,5分鍾未使用自動過期。

參數說明

通過 code 換取網頁授權 access_token

注意,這里的 access_token調用公眾平台API所需的基礎 access_token不是一個東東,只是名字一樣而已。

這一步是在服務端完成的,需要公眾號的 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"
}

參考資料

微信網頁授權官方文檔

文章首發:https://www.jianshu.com/u/13cd86311525


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM