很多網站做了很多年,積累了很多的用戶會員,但是互聯網發展的速度實在是快,用戶使用網絡的地方也越來越多,很多的網站都需要有會員才能正常的使用,但是網站多了,注冊的會員賬號也就多了,記錄帳號信息的數量就越來越多,所以很多網站都更新了微信一鍵注冊登錄的功能,使用微信登錄不用再記帳號密碼等信息也不用頻繁輸入帳號密碼,微信授權直接登錄。
下面就直接介紹微信授權的邏輯和代碼:
首選需要配置微信公眾號的一些基本信息,獲取到關鍵信息一個是appid還有就是secret秘鑰,接著就是網頁授權的三個步驟
1:用戶授權獲取code參數
2:通過code參數獲取access_token參數
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
介紹一下連接地址中需要放入的參數,首先appid為公眾號的公眾號的唯一標識,redirect_uri授權后重定向的回調鏈接地址,需要用urlEncode函數對鏈接進行處理,response_type返回值,必須為code,scope參數有兩個選項一個是應用授權作用域,snsapi_base 參數(不彈出授權頁面,直接跳轉,只能獲取用戶openid),另一個是snsapi_userinfo 參數(彈出授權頁面,可通過openid拿到昵稱、性別、所在地。并且, 即使在未關注的情況下,只要用戶授權,也能獲取其信息 )最后一個參數state,用戶傳遞的參數。#wechat_redirect必須放在連接最后
下圖為scope參數為snsapi_userinfo 的授權頁面

接著第二部用獲取到的code值換區網頁授權的access_token,這里通過code換取的是用于網頁授權access_token,與基礎支持中通過appid和secret獲取到的access_token值不同,網頁授權的access_token只能通過code來換取,用code參數訪問下面的網址
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_cod
其中grant_type參數需要填寫為authorization_code,訪問成功的話會返回JSON數據
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}返回的參數中包含access_token,expires_in接口調用憑證超時時間,refresh_token刷新的token,openid用戶唯一標識和scope用戶授權的作用域,獲取到用戶的openid基本上就可以用來區分用戶了,也可以使用openid繼續獲取用戶的基本信息,前提是scope的值為snsapi_userinfo
最后一步獲取用戶信息,可以通過剛剛返回的access_token和openid獲取用戶信息。
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
成功的話會返回json數據,正確的數據包格式如下,可以獲取到用戶的很多信息,用戶昵稱性別等等
{
"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"
}



