取得使用者資訊步驟如下:
1 第一步:使用者同意授權,取得code
2 第二步:透過code換取網頁授權access_token
3 第三步:刷新access_token(如果需要)
4 第四步:拉取用戶資訊(需scope為snsapi_userinfo)
1 取得code
在確保微信公眾帳號擁有授權作用域( scope參數)的權限的前提下(服務號碼獲得高級介面後,預設擁有scope參數中的snsapi_base和snsapi_userinfo),引導追蹤者開啟如下頁面:
#open .weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
#提示“該連結無法存取錯誤”,請檢查參數是否填寫錯誤”,請檢查參數是否填寫錯誤,是否擁有scope參數對應的授權作用域權限。
尤其註意:由於授權操作安全性等級較高,所以在發起授權請求時,微信會對授權連結做正規則強匹配校驗,如果連結的參數順序不對,授權頁面將無法正常存取
其中:
AppID - 公眾號碼的唯一識別
REDIRECT_URI - 跳轉url
SCOPE - 值為snsapi_base(不彈出授權頁面,直接跳轉,只能取得使用者openid) 或snsapi_userinfo (彈出授權頁面,可透過openid拿到暱稱、性別、所在地。並且,即使在未關注的情況下,只要使用者授權,也能取得其資訊)
STATE - 開發者可以自訂填寫a-zA-Z0-9的參數值
2 透過code換取網頁授權access_token
如果使用者同意授權,頁面將跳轉至redirect_uri/?code=CODE&state=STATE。
state就是上面的STATE參數原樣傳過來的
實作程式碼:
<code class="hljs php">$code = I('get.code');if (empty($code)) { //todo 非微信访问 exit('</code>'); } else { //授权后操作 }
在這裡我們就可以得到code來當作後續的取得access_token。
獲取code後,請求以下鏈接獲取access_token:
api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
appid - 公眾號碼的唯一識別
secret - 金鑰
code - 上述所傳回的code
grant_type - 值為authorization_code
實作碼:
<code class="hljs bash">$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . C('wechat.AppID') . '&secret=' . C('wechat.AppSecret');$str = file_get_contents ($url);$str = json _decode($str, true);$access_token = $str['access_token'];</code>
這裡access_token可以做快取處理,避免造成頻繁取得
實作程式碼,以TP框架為例:
<code class="hljs php">$access_token = S('access_token');if (empty($access_token)) { $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . C('wechat.AppID') . '&secret=' . C('wechat.AppSecret'); $str = file_get_contents($url); $str = json_decode($str, true); $access_token = $str['access_token']; S('access_token', $access_token, 3600);}</code>
在取得access_token後,也會一併返回openid(用戶唯一標識),微信官方文檔的解釋是:用戶唯一標識,請注意,在未關注公眾號時,用戶訪問公眾號的網頁,也會產生一個用戶和公眾號唯一的OpenID
openid是唯一標識微信用戶的,如果用戶不是第一次登陸,可以在得到openid後查詢資料庫是否有綁定此openid的用戶,之後就無需重新獲取用戶數據,直接取得的資料庫user_id設定session,直接登陸存取
3 第三步忽略,只在需要的時間重新取得access_token而已
4 拉取用戶資訊(需scope為snsapi_userinfo)
在資料庫無此微訊號使用者的綁定下,就相當於使用者首次造訪登陸,則透過第四步驟來取得使用者資訊(在使用者授權情況下,網頁授權作用域為snsapi_userinfo,則此時開發者可以透過access_token和openid拉取使用者資訊了),然後後台建立user並綁定此微
訊號使用者(透過openid)
http:GET(請使用https協定)api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang =zh_CN
access_token - 上述所取得的access_token
openid - 公眾號碼唯一識別
實現程式碼:
<code class="hljs php">$access_token = S('access_token');if (empty($access_token)) { $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . C('wechat.AppID') . '&secret=' . C('wechat.AppSecret'); $str = file_get_contents($url); $str = json_decode($str, true); $access_token = $str['access_token']; S('access_token', $access_token, 3600);}</code>
以上就是微信公眾號獲取用戶資訊的具體步驟。
【相關推薦】
1. 微信公眾號平台原始碼下載
以上是網頁授權取得使用者資訊的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!