微信接入之獲取用戶頭像的方法步驟
前段時(shí)間寫了關(guān)于微信支付接入,順便就把獲取用戶昵稱,頭像的方式也歸納下,這個(gè)其實(shí)挺簡(jiǎn)單的,具體的方法看官方文檔即可。這里只提幾個(gè)重點(diǎn)。
scope參數(shù)
看過微信文檔的話,微信的規(guī)定是,對(duì)于scope參數(shù),如果需要獲取用戶信息的話,scope參數(shù)為snsapi_userinfo。但是我接下來,使用過一次userinfo,實(shí)際上用snsapi_base也可以獲得用戶信息,一模一樣的返回值,對(duì)于獲取頭像和昵稱完全沒有任何問題
獲取頭像
獲取頭像其實(shí)有一點(diǎn)麻煩的就是跨域問題。要解決這個(gè)跨域問題,可以采用設(shè)置一個(gè)代理服務(wù)器,或者通過配置相關(guān)服務(wù)器(ngix,apache)來解決。這個(gè)網(wǎng)上方法很多,我這里說的是不通過配置服務(wù)器的方法。
在我們的項(xiàng)目中,我并不想使用配置一個(gè)web服務(wù)器或者代理,因?yàn)槲覀兪怯螒蚍?wù)器,我們是自己實(shí)現(xiàn)的,并沒有使用什么web服務(wù)器框架,那么這種情況下,我們解決跨域的問題就是由我們的服務(wù)器后端直接對(duì)跨域資源發(fā)起請(qǐng)求,在獲得對(duì)應(yīng)的資源后,再返回前端。OK,這就是具體方法
具體實(shí)現(xiàn)時(shí),其實(shí)很簡(jiǎn)單,獲取到頭像的url后,直接發(fā)起一個(gè)http請(qǐng)求并獲取返回即可。
注意:http請(qǐng)求方式為“GET”
另外需要提的一點(diǎn)是,對(duì)response的返回,要直接使用stream.Read,如果使用streamReader,以文本方式讀取字節(jié)流讀出來的數(shù)據(jù)是無法轉(zhuǎn)成圖片的。(我查閱過MSDN關(guān)于這兩個(gè)接口的說明,只是讀取時(shí)一個(gè)是文本形式,一個(gè)是字節(jié)流形式,其他并沒有過多的說有什么區(qū)別)。
然后記得將字節(jié)流以Base64方式轉(zhuǎn)換,交由我們的前端處理
request = HttpWebRequest.Create(url); request.Method = "GET"; response = request.GetResponse(); stream = response.GetResponseStream(); var buffer = new byte[4096]; var num = stream.Read(buffer, 0, 4096); var head = Convert.ToBase64String(buffer, 0, num); stream.Dispose(); response.Close();
上面的代碼有一個(gè)問題,我后來才注意到,就是當(dāng)圖片比較大的時(shí)候,比如頭像地址最后的參數(shù)是64以上,或是/0(此時(shí)返回640*640大小的圖片),這個(gè)時(shí)候,stream可能一次不能讀取完所有的數(shù)據(jù),所以修改代碼為
var request = HttpWebRequest.Create(url); request.Method = "GET"; var response = request.GetResponse(); var stream = response.GetResponseStream(); var buffer = new byte[response.ContentLength]; var num = stream.Read(buffer, 0, (int)response.ContentLength); var total = num; while(num > 0) { num = stream.Read(buffer, total, (int)(response.ContentLength - total)); total += num; } head = Convert.ToBase64String(buffer, 0, total);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS面向?qū)ο缶幊虒?shí)現(xiàn)的Tab選項(xiàng)卡案例詳解
這篇文章主要介紹了JS面向?qū)ο缶幊虒?shí)現(xiàn)的Tab選項(xiàng)卡,結(jié)合具體案例形式詳細(xì)分析了JS基于面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)現(xiàn)Tab選項(xiàng)卡的相關(guān)操作技巧,需要的朋友可以參考下2020-03-03js實(shí)現(xiàn)一個(gè)頁面多個(gè)倒計(jì)時(shí)的3種方法
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)一個(gè)頁面多個(gè)倒計(jì)時(shí)的3種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02基于JavaScript代碼實(shí)現(xiàn)自動(dòng)生成表格
本文給大家分享一段js代碼實(shí)現(xiàn)輸入表格行數(shù)、列數(shù)自動(dòng)生成表格源代碼,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-06-06CKEditor 4.4.1 添加代碼高亮顯示插件功能教程【使用官方推薦Code Snippet插件】
這篇文章主要介紹了CKEditor 4.4.1 添加代碼高亮顯示插件功能,涉及ckeditor使用官方推薦Code Snippet插件的相關(guān)操作布局與使用注意事項(xiàng),需要的朋友可以參考下2019-06-06javascript+html5實(shí)現(xiàn)繪制圓環(huán)的方法
這篇文章主要介紹了javascript+html5實(shí)現(xiàn)繪制圓環(huán)的方法,實(shí)例分析了javascript實(shí)現(xiàn)html5基于canvas繪制圓環(huán)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07