微信網(wǎng)頁授權登錄實踐總結

進行微信公眾號內(nèi)應用開發(fā)一年多了,最近不是很忙,就想起整理下自己用的東西。所以今天介紹下微信網(wǎng)頁授權登錄實現(xiàn)。一呢,幫助以后自己快速回憶;二呢,幫助剛接觸的同行。

需求:如果用戶在微信客戶端中訪問第三方網(wǎng)頁,公眾號可以通過微信網(wǎng)頁授權機制,來獲取用戶基本信息,進而實現(xiàn)業(yè)務邏輯。

準備:開發(fā)者需要先到公眾平臺官網(wǎng)中的“開發(fā) - 接口權限 - 網(wǎng)頁服務 - 網(wǎng)頁帳號 - 網(wǎng)頁授權獲取用戶基本信息”的配置選項中,修改授權回調(diào)域名

開門見山,直接開始吧。

第一步:用戶同意授權,獲取code(前端發(fā)起)

在確保微信公眾賬號擁有授權作用域(scope參數(shù))的權限的前提下(服務號獲得高級接口后,默認擁有scope參數(shù)中的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?

若提示“該鏈接無法訪問”,請檢查參數(shù)是否填寫錯誤,是否擁有scope參數(shù)對應的授權作用域權限。

參數(shù)說明:

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

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%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&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/?code=CODE&state=STATE。

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

第二步:通過code換取網(wǎng)頁授權access_token(后端)

請求方法:

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

參數(shù)說明:

我們看到鏈接中帶有公眾號的secret參數(shù),以及獲取到的access_token安全級別都非常高,必須只保存在服務器,不允許傳給客戶端。后續(xù)刷新access_token、通過access_token獲取用戶信息等步驟,也必須從服務器發(fā)起。、

返回說明

正確時返回的JSON數(shù)據(jù)包如下:

{ "access_token":"ACCESS_TOKEN",

"expires_in":7200,

"refresh_token":"REFRESH_TOKEN",

"openid":"OPENID",

"scope":"SCOPE" }

第三步:刷新access_token(如果需要,后端)

由于access_token擁有較短的有效期,當access_token超時后,可以使用refresh_token進行刷新,refresh_token有效期為30天,當refresh_token失效之后,需要用戶重新授權。

請求方法:

獲取第二步的refresh_token后,請求以下鏈接獲取access_token:

https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

返回說明

正確是返回的JSON數(shù)據(jù)包如下:

{ "access_token":"ACCESS_TOKEN",

"expires_in":7200,

"refresh_token":"REFRESH_TOKEN",

"openid":"OPENID",

"scope":"SCOPE" }

第四步:拉取用戶信息(需scope為snsapi_userinfo,后端)

如果網(wǎng)頁授權作用域為snsapi_userinfo,則此時開發(fā)者可以通過access_token和openid拉取用戶信息了。

請求方法

http:GET(請使用https協(xié)議) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

參數(shù)說明

返回說明

正確時返回的JSON數(shù)據(jù)包如下:

{ ? ?"openid":" OPENID",

" nickname": NICKNAME,

"sex":"1",

"province":"PROVINCE"

"city":"CITY",

"country":"COUNTRY",

"headimgurl": ? ?"http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ

4eMsv84eavHiaiceqxibJxCfHe/46",

"privilege":[ "PRIVILEGE1" "PRIVILEGE2" ? ? ],

"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"

}

上面的步驟是我從微信開發(fā)文檔copy過來的。不一樣的是我要總結下我們的前后端實現(xiàn)的大體步驟。第一步是前端發(fā)起,由于安全需要和數(shù)據(jù)存儲二、三、四步都由后端實施:

1、前端打開? ?https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect? 鏈接(具體參數(shù)賦值看上面),微信會返回code參數(shù),并跳轉redirect_uri的鏈接,code作為url參數(shù)。

2、前端把這個code作為數(shù)據(jù)調(diào)用后端登錄接口,后端拿到code,加上appid和secret參數(shù) 請求??https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code? 來獲取access_token,同時拿到openid。

3.后端會先判斷數(shù)據(jù)庫里有沒有該openid,如果有的話,后端將數(shù)據(jù)(用戶信息)返回到前端;如果沒有,則請求??https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code? 獲取用戶信息,返回給前端并存在數(shù)據(jù)庫里。

微信網(wǎng)頁授權文檔:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容