根據微信公眾號開發官方文檔:
獲取用戶信息步驟如下:
1 第一步:用戶同意授權,獲取code
2 第二步:通過code換取網頁授權access_token
3 第三步:刷新access_token(如果需要)
4 第四步:拉取用戶信息(需scope為 snsapi_userinfo)
1 獲取code
在確保微信公眾賬號擁有授權作用域(scope參數)的權限的前提下(服務號獲得高級接口后,默認擁有scope參數中的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
若提示“該鏈接無法訪問”,請檢查參數是否填寫錯誤,是否擁有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:
https://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>
新聞熱點
疑難解答