根據微信公眾號開發官方文件:
獲取使用者資訊步驟如下:
1 第一步:使用者同意授權,取得code
2 第二步:透過code換取網頁授權access_token
3 第三步:刷新access_token(如果需要)
4 第四步:拉取用戶資訊(需scope為snsapi_userinfo)
1 取得code
在確保微信公眾帳號擁有授權作用域(scope參數)的取得code
尤其註意:由於授權操作安全等級較高,所以在發起授權請求時,微信會對授權連結做正規強匹配校驗,如果連結的參數順序不對,授權頁面將無法正常存取
AppID - 公眾號碼的唯一識別
REDIRECT_URI - 跳轉url
state就是上面的STATE參數原樣傳過來的
<code class="hljs php">$code = I('get.code'); if (empty($code)) { //todo 非微信访问 exit('</code>'); }else{ //授权后操作 }
在這裡我們可以得到code作為後續的取得access_token。
取得code後,請要求以下連結取得access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SEqT&code=CODE&grant__Lun識別secret - 密鑰
code - 上述所回傳的codegrant_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>
<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而已
請求方法
http:GET(請使用https協定) https://api.weixin.qq.com/ sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
access_token - 上述所取得的access_token
openid - 公眾號碼唯一識別