微信公衆平臺網頁授權

最近要做一個功能,用戶掃描二維碼,獲取用戶信息,判斷他是否關注了公衆號,來進行一系列操作;

其中需要獲取用戶信息,微信有幾種方式獲取用戶信息,這邊我瞭解如下幾種可以:

1.通過網頁授權獲取用戶的openid,通過openid再調用用戶基本信息接口;

2.用戶關注公衆號,通過微信事件推送,可以獲取用戶的openid,通過openid再調用用戶基本信息接口;


這邊用戶通過掃描二維碼,來獲取用戶信息的話,使用微信網頁授權的方式更合適。下面來具體的看一下如何實現:

先讀一遍微信網頁授權開發文檔:點擊打開鏈接

 第一步:用戶同意授權,獲取code

 第二步:通過code換取網頁授權access_token

第一步:用戶同意授權,獲取code

在確保微信公衆賬號擁有授權作用域(scope參數)的權限的前提下(服務號獲得高級接口後,默認擁有scope參數中的snsapi_base和snsapi_userinfo),引導關注者打開如下頁面:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示“該鏈接無法訪問”,請檢查參數是否填寫錯誤,是否擁有scope參數對應的授權作用域權限。 

尤其注意:由於授權操作安全等級較高,所以在發起授權請求時,微信會對授權鏈接做正則強匹配校驗,如果鏈接的參數順序不對,授權頁面將無法正常訪問

參考鏈接(請在微信客戶端中打開此鏈接體驗): 

scope爲snsapi_base

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdap

ter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_bas

e&state=123#wechat_redirect 

scope爲snsapi_userinfo 

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=

code&scope=snsapi_userinfo&state=STATE#wechat_redirect 

尤其注意:跳轉回調redirect_uri,應當使用https鏈接來確保授權code的安全性。

參數說明

參數 是否必須 說明
appid 公衆號的唯一標識
redirect_uri 授權後重定向的回調鏈接地址,請使用urlEncode對鏈接進行處理
response_type 返回類型,請填寫code
scope 應用授權作用域,snsapi_base (不彈出授權頁面,直接跳轉,只能獲取用戶openid),snsapi_userinfo (彈出授權頁面,可通過openid拿到暱稱、性別、所在地。並且,即使在未關注的情況下,只要用戶授權,也能獲取其信息
state 重定向後會帶上state參數,開發者可以填寫a-zA-Z0-9的參數值,最多128字節
#wechat_redirect 無論直接打開還是做頁面302重定向時候,必須帶此參數

下圖爲scope等於snsapi_userinfo時的授權頁面:

用戶同意授權後

如果用戶同意授權,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE。

code說明 : code作爲換取access_token的票據,每次用戶授權帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動過期。 

第二步:通過code換取網頁授權access_token

首先請注意,這裏通過code換取的是一個特殊的網頁授權access_token,與基礎支持中的access_token(該access_token用於調用其他接口)不同。公衆號可通過下述接口來獲取網頁授權access_token。如果網頁授權的作用域爲snsapi_base,則本步驟中獲取到網頁授權access_token的同時,也獲取到了openid,snsapi_base式的網頁授權流程即到此爲止。

尤其注意:由於公衆號的secret和獲取到的access_token安全級別都非常高,必須只保存在服務器,不允許傳給客戶端。後續刷新access_token、通過access_token獲取用戶信息等步驟,也必須從服務器發起。

請求方法

獲取code後,請求以下鏈接獲取access_token:  https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code 

參數說明

參數 是否必須 說明
appid 公衆號的唯一標識
secret 公衆號的appsecret
code 填寫第一步獲取的code參數
grant_type 填寫爲authorization_code   

返回說明

正確時返回的JSON數據包如下:

{ "access_token":"ACCESS_TOKEN",    

 "expires_in":7200,    

 "refresh_token":"REFRESH_TOKEN",    

 "openid":"OPENID",    

 "scope":"SCOPE" } 

參數 描述
access_token 網頁授權接口調用憑證,注意:此access_token與基礎支持的access_token不同
expires_in access_token接口調用憑證超時時間,單位(秒)
refresh_token 用戶刷新access_token
openid 用戶唯一標識,請注意,在未關注公衆號時,用戶訪問公衆號的網頁,也會產生一個用戶和公衆號唯一的OpenID
scope 用戶授權的作用域,使用逗號(,)分隔

錯誤時微信會返回JSON數據包如下(示例爲Code無效錯誤):

{"errcode":40029,"errmsg":"invalid code"} 

以上是微信官方文檔說明;

注意點:

1.請求url順序不能寫錯。

2.別忘了去公衆平臺基本配置中配置ip白名單,不配置請求不通。

3.別忘了去公衆平臺開發者工具-->公衆平臺測試賬號-->修改下回調域名(這邊本地測試可以使用花生殼內網穿透)。




發佈了77 篇原創文章 · 獲贊 51 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章