微信開(kāi)放接口getUserInfo、login、getUserProfile的愛(ài)恨情仇?
- 前言
- 1.wx.login:
- 2.wx.getUserInfo(應(yīng)該是要廢棄):
- 3.wx.getUserProfile(重點(diǎn)推廣,重點(diǎn)說(shuō)明):
- 總結(jié)
前言
雖然我是一個(gè)后端,但是是小程序剛出來(lái)的時(shí)候就開(kāi)始學(xué)習(xí)并上線(xiàn)個(gè)人小程序的玩家,個(gè)人小程序有:小豬翻譯、位置幫手、票票幫手 企業(yè)小程序:碼農(nóng)幫手、星家edu、飄飄診斷都是我個(gè)人開(kāi)發(fā)的作品。小程序整個(gè)的體驗(yàn)確實(shí)比網(wǎng)頁(yè)好,還能屏蔽操作系統(tǒng),并且我個(gè)人的體會(huì)是特別適合后端程序員開(kāi)發(fā)使用一些有用的工具。本篇我來(lái)介紹針對(duì)這半年至一年微信登錄獲取用戶(hù)信息的調(diào)整,來(lái)幫助大家更好的梳理和完微信接口整改。
1.wx.login:
官網(wǎng)api說(shuō)明地址: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html 代碼:
- wx.login({ success (res) { if (res.code) { //發(fā)起網(wǎng)絡(luò)請(qǐng)求
- wx.request({ url: 'https://example.com/onLogin', data: { code: res.code
- }
- })
- } else { console.log('登錄失敗!' + res.errMsg)
- }
- }
- })
這個(gè)是干什么呢?就是使用此方法拿到臨時(shí)code去自己的服務(wù)器后臺(tái)(appId+秘鑰)獲取openId等用戶(hù)的私密信息,openId的唯一獲取渠道。此接口經(jīng)常被開(kāi)發(fā)者濫用,我之前開(kāi)發(fā)也是在頁(yè)面當(dāng)中onLoad、onShow、onReady中調(diào)用,這樣其實(shí)做了很多無(wú)用功,現(xiàn)在小程序規(guī)范要求是在小程序初始化事件onLaunch中調(diào)用一次即可,然后通過(guò)getApp()的全局變量去維護(hù)用戶(hù)信息就可以。
2.wx.getUserInfo(應(yīng)該是要廢棄):
官方api文檔地址: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.html 之前的代碼調(diào)用:
- // 必須是在用戶(hù)已經(jīng)授權(quán)的情況下調(diào)用wx.getUserInfo({
- success: function(res) { var userInfo = res.userInfo
- var nickName = userInfo.nickName
- var avatarUrl = userInfo.avatarUrl
- var gender = userInfo.gender //性別 0:未知、1:男、2:女
- var province = userInfo.province
- var city = userInfo.city
- var country = userInfo.country
- }
- })
官方最新的淘汰說(shuō)明是:為?優(yōu)化用戶(hù)的使用體驗(yàn),平臺(tái)將進(jìn)行以下調(diào)整:
2021年2月23日起,若小程序已在微信開(kāi)放平臺(tái)進(jìn)行綁定,則通過(guò)wx.login接口獲取的登錄憑證可直接換取unionID 2021年4月28日24時(shí)后發(fā)布的小程序新版本,無(wú)法通過(guò)wx.getUserInfo與獲取用戶(hù)個(gè)人信息(頭像、昵稱(chēng)、性別與地區(qū)),將直接獲取匿名數(shù)據(jù)(包括userInfo與encryptedData中的用戶(hù)個(gè)人信息),獲取加密后的openID與unionID數(shù)據(jù)的能力不做調(diào)整。此前發(fā)布的小程序版本不受影響,但如果要進(jìn)行版本更新則需要進(jìn)行適配。新增getUserProfile接口(基礎(chǔ)庫(kù)2.10.4版本開(kāi)始支持),可獲取用戶(hù)頭像、昵稱(chēng)、性別及地區(qū)信息,開(kāi)發(fā)者每次通過(guò)該接口獲取用戶(hù)個(gè)人信息均需用戶(hù)確認(rèn)。具體接口文檔:《getUserProfile接口文檔》 由于getUserProfile接口從2.10.4版本基礎(chǔ)庫(kù)開(kāi)始支持(覆蓋微信7.0.9以上版本),考慮到開(kāi)發(fā)者在低版本中有獲取用戶(hù)頭像昵稱(chēng)的訴求,對(duì)于未支持getUserProfile的情況下,開(kāi)發(fā)者可繼續(xù)使用getUserInfo能力。開(kāi)發(fā)者可參考getUserProfile接口文檔中的示例代碼進(jìn)行適配。
3.wx.getUserProfile(重點(diǎn)推廣,重點(diǎn)說(shuō)明):
舊的獲取用戶(hù)信息的apiwx.getUserInfo的替代api為:wx.getUserProfile 官方api地址: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html 代碼:
- getUserProfile(e) { // 推薦使用wx.getUserProfile獲取用戶(hù)信息,開(kāi)發(fā)者每次通過(guò)該接口獲取用戶(hù)個(gè)人信息均需用戶(hù)確認(rèn)
- // 開(kāi)發(fā)者妥善保管用戶(hù)快速填寫(xiě)的頭像昵稱(chēng),避免重復(fù)彈窗
- wx.getUserProfile({ desc: '用于完善會(huì)員資料', // 聲明獲取用戶(hù)個(gè)人信息后的用途,后續(xù)會(huì)展示在彈窗中,請(qǐng)謹(jǐn)慎填寫(xiě)
- success: (res) => { this.setData({ userInfo: res.userInfo, hasUserInfo: true
- })
- }
- })
- },
這個(gè)是最新的用戶(hù)信息的獲取的api,其實(shí)很上面的2.wx.getUserInfo用法差不多。應(yīng)用場(chǎng)景就是用戶(hù)沒(méi)有進(jìn)行過(guò)頭像和昵稱(chēng)授權(quán)的時(shí)候
- <button wx:if="{{caniusegetuserprofile}}" bindtap="getuserprofile"> 獲取頭像昵稱(chēng) </button wx:if="{{caniusegetuserprofile}}" bindtap="getuserprofile">
通過(guò)前端綁定此事件授權(quán)獲取用戶(hù)的最新昵稱(chēng)和頭像,然后進(jìn)行用戶(hù)的信息操作。
總結(jié)
我不知道我上面介紹完是不是已經(jīng)幫大家梳理清楚三個(gè)接口api的使用情況,總的來(lái)說(shuō)流程就是:在小程序的啟動(dòng)事件onLaunch中進(jìn)行wx.login通過(guò)code傳遞到后端獲取openId,相當(dāng)于用戶(hù)登錄操作,獲取用戶(hù)信息返回給前端。假入用戶(hù)是初次登錄或者想更新昵稱(chēng)和頭像再進(jìn)行wx.getUserProfile授權(quán)調(diào)用等。如果你有什么跟我交流的歡迎關(guān)注公眾號(hào):Java時(shí)間屋 進(jìn)行交流。



























