微信公眾號(hào)-獲取用戶信息(網(wǎng)頁授權(quán)獲取)實(shí)現(xiàn)步驟
根據(jù)微信公眾號(hào)開發(fā)官方文檔:
獲取用戶信息步驟如下:
1 第一步:用戶同意授權(quán),獲取code
2 第二步:通過code換取網(wǎng)頁授權(quán)access_token
3 第三步:刷新access_token(如果需要)
4 第四步:拉取用戶信息(需scope為 snsapi_userinfo)
1 獲取code
在確保微信公眾賬號(hào)擁有授權(quán)作用域(scope參數(shù))的權(quán)限的前提下(服務(wù)號(hào)獲得高級(jí)接口后,默認(rèn)擁有scope參數(shù)中的snsapi_base和snsapi_userinfo),引導(dǎo)關(guān)注者打開如下頁面:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“該鏈接無法訪問”,請(qǐng)檢查參數(shù)是否填寫錯(cuò)誤,是否擁有scope參數(shù)對(duì)應(yīng)的授權(quán)作用域權(quán)限。
尤其注意:由于授權(quán)操作安全等級(jí)較高,所以在發(fā)起授權(quán)請(qǐng)求時(shí),微信會(huì)對(duì)授權(quán)鏈接做正則強(qiáng)匹配校驗(yàn),如果鏈接的參數(shù)順序不對(duì),授權(quán)頁面將無法正常訪問
其中:
AppID - 公眾號(hào)的唯一標(biāo)識(shí)
REDIRECT_URI - 跳轉(zhuǎn)url
SCOPE - 值為snsapi_base(不彈出授權(quán)頁面,直接跳轉(zhuǎn),只能獲取用戶openid) 或snsapi_userinfo (彈 出授權(quán)頁面,可通過openid拿到昵稱、性別、所在地。并且,即使在未關(guān)注的情況下,只要用戶授權(quán),也能獲取其信息)
STATE - 開發(fā)者可以自定義填寫a-zA-Z0-9的參數(shù)值
2 通過code換取網(wǎng)頁授權(quán)access_token
如果用戶同意授權(quán),頁面將跳轉(zhuǎn)至 redirect_uri/?code=CODE&state=STATE。
state就是上面的STATE參數(shù)原樣傳過來的
實(shí)現(xiàn)代碼:
<code class="hljs php">$code = I('get.code'); if (empty($code)) { //todo 非微信訪問 exit('</code>'); }else{ //授權(quán)后操作 }
在這里我們就可以得到code用作后續(xù)的獲取access_token。
獲取code后,請(qǐng)求以下鏈接獲取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
appid - 公眾號(hào)的唯一標(biāo)識(shí)
secret - 密鑰
code - 上述所返回的code
grant_type - 值為authorization_code
實(shí)現(xiàn)代碼:
<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可以做緩存處理,避免造成頻繁獲取
實(shí)現(xiàn)代碼,以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后,也會(huì)一并返回openid(用戶唯一標(biāo)識(shí)),微信官方文檔的解釋是:用戶唯一標(biāo)識(shí),請(qǐng)注意,在未關(guān)注公眾號(hào)時(shí),用戶訪問公眾號(hào)的網(wǎng)頁,也會(huì)產(chǎn)生一個(gè)用戶和公眾號(hào)唯一的OpenID
openid是唯一標(biāo)識(shí)微信用戶的,如果用戶不是第一次登陸,可以在得到openid后查詢數(shù)據(jù)庫是否有綁定此openid的用戶,之后就無需重新獲取用戶數(shù)據(jù),直接獲取的數(shù)據(jù)庫user_id設(shè)置session,直接登陸訪問
3 第三步忽略,只在需要的時(shí)間重新獲取access_token而已
4 拉取用戶信息(需scope為 snsapi_userinfo)
在數(shù)據(jù)庫無此微信號(hào)用戶的綁定下,就相當(dāng)于用戶首次訪問登陸,則通過第四步來獲取用戶信息(在用戶授權(quán)情況下,網(wǎng)頁授權(quán)作用域?yàn)閟nsapi_userinfo,則此時(shí)開發(fā)者可以通過access_token和openid拉取用戶信息了),然后后臺(tái)創(chuàng)建user并綁定此微
信用戶(通過openid)
請(qǐng)求方法
http:GET(請(qǐng)使用https協(xié)議) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
access_token - 上述所獲取的access_token
openid - 公眾號(hào)唯一標(biāo)識(shí)
實(shí)現(xiàn)代碼:
<code class="hljs php">$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN"; $str = file_get_contents($url); $str = json_decode($str, true); if (empty($str['errcode'])) { //創(chuàng)建user并綁定openid }else{ //錯(cuò)誤處理 }</code>
以上就是微信公眾號(hào)獲取用戶信息的具體步驟。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
javascript面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)踐常用知識(shí)點(diǎn)總結(jié)
這篇文章主要介紹了javascript面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)踐常用知識(shí)點(diǎn),結(jié)合實(shí)例形式總結(jié)分析了javascript面向?qū)ο蟪绦蛟O(shè)計(jì)中原型引用類型、屬性、方法相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-07-07javascript中的prototype屬性使用說明(函數(shù)功能擴(kuò)展)
一說到prototype很多人可能第一個(gè)想到的是著名的prototype.js框架,當(dāng)然我們今天說的不是它,而是Javascript中的prototype屬性,一般都被翻譯為“原型”。2010-08-08全面解析Bootstrap中transition、affix的使用方法
這篇文章主要為大家詳細(xì)解析了Bootstrap中transition、affix的使用方法,感興趣的朋友可以參考一下2016-05-05一個(gè)字符串中出現(xiàn)次數(shù)最多的字符 統(tǒng)計(jì)這個(gè)次數(shù)【實(shí)現(xiàn)代碼】
下面小編就為大家?guī)硪黄粋€(gè)字符串中出現(xiàn)次數(shù)最多的字符 統(tǒng)計(jì)這個(gè)次數(shù)【實(shí)現(xiàn)代碼】。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-04-04JavaScript之a(chǎn)ppendChild、insertBefore和insertAfter使用說明
這幾天需要用到對(duì)HTML節(jié)點(diǎn)元素的刪/插操作,由于用到insertBefore方法的時(shí)候遇到了一些麻煩,現(xiàn)在作為知識(shí)的整理,分別對(duì)appendChild、insertBefore和insertAfter做個(gè)總結(jié)2010-12-12uniapp實(shí)現(xiàn)微信一鍵登錄按鈕樣式(膠囊按鈕的樣式)
這篇文章主要介紹了uniapp實(shí)現(xiàn)微信一鍵登錄按鈕樣式,如何開發(fā)膠囊按鈕的樣式,需要的朋友可以參考下2024-07-07微信小程序scroll-view仿拼多多橫向滑動(dòng)滾動(dòng)條
這篇文章主要為大家詳細(xì)介紹了微信小程序scroll-view仿拼多多橫向滑動(dòng)滾動(dòng)條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07layui table 復(fù)選框跳頁后再回來保持原來選中的狀態(tài)示例
今天小編就為大家分享一篇layui table 復(fù)選框跳頁后再回來保持原來選中的狀態(tài)示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10innerHTML innerText textContent使用區(qū)別示例詳解
這篇文章主要為大家介紹了innerHTML innerText textContent使用區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11