以下是微信小程序获取用户头像和昵称的最新实现方案(2025年),基于微信官方最新的用户信息获取规则:
<button>
组件触发open-type
属性<!-- 获取头像 -->
<button
open-type="chooseAvatar"
bindchooseavatar="onChooseAvatar"
class="avatar-btn"
>
<image
src="{{avatarUrl || '/default-avatar.png'}}"
class="avatar"
/>
</button>
<!-- 获取昵称 -->
<input
type="nickname"
class="nickname-input"
value="{{nickName}}"
placeholder="请输入昵称"
bindblur="onNickNameInput"
/>
Page({
data: {
avatarUrl: '',
nickName: ''
},
// 获取头像回调
onChooseAvatar(e) {
const { avatarUrl } = e.detail
this.setData({
avatarUrl: avatarUrl // 临时头像路径
})
// 需要自行上传到服务器保存
this.uploadAvatar(avatarUrl)
},
// 获取昵称回调
onNickNameInput(e) {
this.setData({
nickName: e.detail.value
})
// 保存昵称到服务器
wx.request({
url: 'https://your-api.com/saveUserInfo',
method: 'POST',
data: { nickName: e.detail.value }
})
},
// 上传头像到服务器
uploadAvatar(tempPath) {
wx.uploadFile({
url: 'https://your-api.com/uploadAvatar',
filePath: tempPath,
name: 'avatar',
success: (res) => {
const data = JSON.parse(res.data)
this.setData({
avatarUrl: data.permanentUrl // 替换为永久地址
})
}
})
}
})
.avatar-btn {
padding: 0;
background: transparent;
border: none;
border-radius: 50%;
}
.avatar {
width: 120rpx;
height: 120rpx;
border-radius: 50%;
}
.nickname-input {
width: 80%;
margin: 30rpx auto;
padding: 20rpx;
border-bottom: 1rpx solid #eee;
}
头像获取
<button open-type="chooseAvatar">
bindchooseavatar
事件回调获取临时路径<button>
包裹<image>
组件昵称获取
<input type="nickname">
特殊输入框bindblur
或 bindinput
获取值注意事项
重要提示:微信已全面禁止自动弹出授权窗口,必须由用户主动触发操作
wx.request
合法域名以上代码已适配微信小程序最新用户信息获取规则(截至2025年),实际开发时请参考https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html。