小程序獲取不到用戶頭像和昵稱返回微信用戶問題解決,即小程序授權(quán)獲取用戶頭像規(guī)則調(diào)
最近好多同學(xué)在學(xué)習(xí)石頭哥小程序課程的時(shí)候,遇到了下面這樣的問題,在小程序授權(quán)獲取用戶頭像和昵稱時(shí),獲取到的是下面這樣的。

到底是什么原因?qū)е碌哪兀バ〕绦蚬俜轿臋n一看,又是官方改規(guī)則了。

點(diǎn)進(jìn)去一看,原來小程序官方,在2022年11月8日以后,又把獲取用戶頭像的接口回收了

再看看網(wǎng)友的評(píng)論,真是罵聲一片啊。

真是我的地盤我做主啊,我說怎么樣就怎么樣啊。有點(diǎn)店大欺客的嫌疑了。。。 但是呢,作為我們苦命的小程序開發(fā)者,官方虐我千百遍,我待官方如初戀。沒辦法啊,我們還是得用小程序不是嗎。。。。
所以石頭哥這里給大家提供幾種解決方案。
一,臨時(shí)解決方案,降低基礎(chǔ)庫
其實(shí)官方又說一句話,對(duì)于低于2.27.1版本的小程序,還是可以使用授權(quán)接口的,也就是說,只要我們的基礎(chǔ)庫低于2.27.1,就可以接著獲取用戶頭像的。

帶著試一試的心態(tài),石頭哥就去把基礎(chǔ)庫調(diào)低為2.27.0

調(diào)低后,再試下獲取頭像功能,果然還是可以獲取到的。

這里要注意一點(diǎn),調(diào)低后,要記得清空下緩存

雖然這個(gè)方法可以解決,但是只是一時(shí)的,因?yàn)樾〕绦蚬俜揭恢庇衎ug,所以官方會(huì)一直升級(jí)基礎(chǔ)庫的,如果我們使用這個(gè)方法太久,就會(huì)導(dǎo)致基礎(chǔ)庫版本落后太多,這樣的話,后續(xù)就會(huì)因?yàn)榛A(chǔ)庫太低,導(dǎo)致一些官方新功能無法使用。所以這個(gè)方案只是臨時(shí)解決方案。
二,(不推薦)官方方案,頭像昵稱填寫能力
官方為了補(bǔ)償我們呢,給我們提供了一個(gè)新的方案。

雖然這個(gè)方案可以獲取到頭像和昵稱,但是呢。。。。。

我們這里是可以獲取到用戶頭像,但是官方給我們返回的這個(gè)頭像是一個(gè)臨時(shí)的鏈接。

既然是臨時(shí)鏈接,就意味著這個(gè)鏈接用不了太久就會(huì)失效了

如果我們想用這個(gè)頭像作為商品評(píng)論里的頭像,那么就不能用這個(gè)臨時(shí)鏈接了。所以官方出的這個(gè)有點(diǎn)雞肋,基本上沒有什么大用。
有用的也就是這個(gè)獲取昵稱。

就是在填寫昵稱的時(shí)候,給input設(shè)置一個(gè)屬性,就可以選用微信昵稱或者自己輸入新的昵稱。

所以如果你只需要使用用戶昵稱不使用頭像,可以用這個(gè)方法。
三,(推薦)自己存儲(chǔ)頭像和昵稱
既然官方老是變來變?nèi)?,還不給我們可以長久使用的頭像鏈接,那么我們就來自己存儲(chǔ)用戶頭像,讓這個(gè)頭像是長久可以用的鏈接。所以我們這里需要自己開發(fā)后臺(tái)存儲(chǔ)頭像。有以下幾種方式
1,用Java或者php開發(fā)后臺(tái),存儲(chǔ)頭像和昵稱
2,用云開發(fā)的云存儲(chǔ)存儲(chǔ)頭像生成永久鏈接
我這里推薦大家使用云開發(fā),因?yàn)樵崎_發(fā)比較簡單,當(dāng)然大家如果會(huì)Java或者php開發(fā),可以自己開發(fā)后臺(tái)用于頭像的上傳和存儲(chǔ)。
獲取昵稱和頭像
首先看下效果圖

可以看到這里可以獲取到昵稱,并且可以自己自定義頭像,這個(gè)自定義的頭像存到云存儲(chǔ)里,返回的是一個(gè)永久的可以使用的鏈接。

這樣我們后面再使用這個(gè)頭像和昵稱,就是永久的了,并且也不用再管小程序官方是不是又改規(guī)則了。
我把對(duì)應(yīng)的代碼,完整的貼出來給到大家
wxml
<view class="item">
?<view class="tip">編輯用戶昵稱</view>
?<input type="nickname" bindinput="getName" />
</view>
<view class="line"></view>
<view class="item" bindtap="chooseImage">
?<view class="tip">點(diǎn)擊修改頭像</view>
?<image src="{{avatarUrl}}" />
</view>
wxss樣式
.item {
? ?display: flex;
? ?align-items: center;
? ?justify-content: space-between;
? ?margin: 15rpx;
? ?border-bottom: 1rpx solid gray;
? ?padding-bottom: 20rpx;
}
.tip {
? ?font-size: 44rpx;
? ?margin: 20rpx;
? ?color: red;
}
.item image {
? ?width: 200rpx;
? ?height: 200rpx;
? ?border-radius: 10rpx;
? ?margin: 10rpx 30rpx;
}
.item input {
? ?flex: 1;
? ?border: 1px solid gray;
? ?border-radius: 20rpx;
? ?padding: 5rpx 15rpx;
}
js邏輯代碼
const app = getApp()
//這里要注意,初始化云開發(fā),下面env要換成你自己的
wx.cloud.init({
?env: 'cloud1-3g3xyg1a9ff9d8fe'
})
const db = wx.cloud.database()
Page({
?getName(e) {
? ?this.setData({
? ? ?name: e.detail.value
? ?})
?},
?//選擇圖片
?chooseImage() {
? ?wx.chooseMedia({
? ? ?count: 1,
? ? ?mediaType: ['image'],
? ? ?sizeType: ['compressed'], //可以指定是原圖還是壓縮圖,這里用壓縮
? ? ?sourceType: ['album', 'camera'], //從相冊(cè)選擇
? ? ?success: (res) => {
? ? ? ?console.log("選擇圖片成功", res)
? ? ? ?let avatarUrl = res.tempFiles[0].tempFilePath
? ? ? ?this.setData({
? ? ? ? ?avatarUrl: avatarUrl
? ? ? ?})
? ? ? ?wx.cloud.uploadFile({
? ? ? ? ?cloudPath: new Date().getTime() + '.png',
? ? ? ? ?filePath: avatarUrl, // 文件路徑
? ? ? ?}).then(res => {
? ? ? ? ?let fileID = res.fileID
? ? ? ? ?console.log("上傳返回的頭像永久鏈接", fileID)
? ? ? ?}).catch(error => {
? ? ? ? ?console.log("上傳失敗", error)
? ? ? ?})
? ? ?}
? ?})
?},
})
當(dāng)然這里是基于云開發(fā)的,如果大家對(duì)云開發(fā)不了解,可以去看石頭哥錄得云開發(fā)視頻:https://www.bilibili.com/video/BV1x54y1s7pk
然后關(guān)于最新版的獲取頭像和昵稱,我也在二手商城小程序的視頻里有做詳細(xì)講解:https://www.bilibili.com/video/BV1WA411M7Dp

后面會(huì)分享更多小程序相關(guān)的知識(shí)給到大家,歡迎點(diǎn)贊留言加關(guān)注。