很多網(wǎng)站做了很多年,積累了很多的用戶會員,但是互聯(lián)網(wǎng)發(fā)展的速度實(shí)在是快,用戶使用網(wǎng)絡(luò)的地方也越來越多,很多的網(wǎng)站都需要有會員才能正常的使用,但是網(wǎng)站多了,注冊的會員賬號也就多了,記錄帳號信息的數(shù)量就越來越多,所以很多網(wǎng)站都更新了微信一鍵注冊登錄的功能,使用微信登錄不用再記帳號密碼等信息也不用頻繁輸入帳號密碼,微信授權(quán)直接登錄。
下面就直接介紹微信授權(quán)的邏輯和代碼:
首選需要配置微信公眾號的一些基本信息,獲取到關(guān)鍵信息一個是appid還有就是secret秘鑰,接著就是網(wǎng)頁授權(quán)的三個步驟
1:用戶授權(quán)獲取code參數(shù)
2:通過code參數(shù)獲取access_token參數(shù)
3:通過access_token訪問微信的接口獲取用戶信息
先介紹如何獲取code參數(shù),微信提供了服務(wù)號的高級接口,只需要讓用戶在頁面中打開微信提供的連接地址即可發(fā)起用戶授權(quán)
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE
介紹一下連接地址中需要放入的參數(shù),首先appid為公眾號的公眾號的唯一標(biāo)識,redirect_uri授權(quán)后重定向的回調(diào)鏈接地址,需要用urlEncode函數(shù)對鏈接進(jìn)行處理,response_type返回值,必須為code,scope參數(shù)有兩個選項(xiàng)一個是應(yīng)用授權(quán)作用域,snsapi_base 參數(shù)(不彈出授權(quán)頁面,直接跳轉(zhuǎn),只能獲取用戶openid),另一個是snsapi_userinfo 參數(shù)(彈出授權(quán)頁面,可通過openid拿到昵稱、性別、所在地。并且, 即使在未關(guān)注的情況下,只要用戶授權(quán),也能獲取其信息 )最后一個參數(shù)state,用戶傳遞的參數(shù)。#wechat_redirect必須放在連接最后
下圖為scope參數(shù)為snsapi_userinfo 的授權(quán)頁面
接著第二部用獲取到的code值換區(qū)網(wǎng)頁授權(quán)的access_token,這里通過code換取的是用于網(wǎng)頁授權(quán)access_token,與基礎(chǔ)支持中通過appid和secret獲取到的access_token值不同,網(wǎng)頁授權(quán)的access_token只能通過code來換取,用code參數(shù)訪問下面的網(wǎng)址
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_cod
其中g(shù)rant_type參數(shù)需要填寫為authorization_code,訪問成功的話會返回JSON數(shù)據(jù)
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
返回的參數(shù)中包含access_token,expires_in接口調(diào)用憑證超時時間,refresh_token刷新的token,openid用戶唯一標(biāo)識和scope用戶授權(quán)的作用域,獲取到用戶的openid基本上就可以用來區(qū)分用戶了,也可以使用openid繼續(xù)獲取用戶的基本信息,前提是scope的值為snsapi_userinfo
最后一步獲取用戶信息,可以通過剛剛返回的access_token和openid獲取用戶信息。
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
成功的話會返回json數(shù)據(jù),正確的數(shù)據(jù)包格式如下,可以獲取到用戶的很多信息,用戶昵稱性別等等
{ "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" }