小程序头像昵称获取

· 2 分钟阅读时长

最近处理小程序,发现微信小程序中获取用户头像和昵称有变动,当然官方文档给的容易让人搞错。这里mark下当前方案。

当前方案如下

wx.getUserProfile-服务端解密获取用户信息

注意:wx.getUserProfile不再提示授权弹窗,但会正常获取encrypted_data/code/iv信息。消息体里的userinfo只是为了兼容老版本,不要使用。

小程序端支持用户修改头像/昵称信息

1. 头像获取

使用 <button open-type="chooseAvatar"> 让用户主动选择头像:

<!-- wxml -->
<button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
  <image class="avatar" src="{{avatarUrl || '/images/default-avatar.png'}}"></image>
</button>
// js
Page({
  data: {
    avatarUrl: ''
  },
  
  onChooseAvatar(e) {
    const { avatarUrl } = e.detail
    this.setData({
      avatarUrl: avatarUrl
    })
    
    // 可选:上传到服务器
    this.uploadAvatar(avatarUrl)
  },
  
  uploadAvatar(tempFilePath) {
    wx.uploadFile({
      url: 'https://your-server.com/upload',
      filePath: tempFilePath,
      name: 'avatar',
      success: (res) => {
        console.log('头像上传成功', res)
      }
    })
  }
})

2. 昵称获取

使用 <input type="nickname"> 让用户输入昵称:

<!-- wxml -->
<form bindsubmit="onSubmit">
  <input
    type="nickname" 
    class="weui-input" 
    placeholder="请输入昵称"
    value="{{nickname}}"
    bindinput="onNicknameInput"
  />
  <button formType="submit">保存</button>
</form>
// js
Page({
  data: {
    nickname: ''
  },
  
  onNicknameInput(e) {
    this.setData({
      nickname: e.detail.value
    })
  },
  
  onSubmit(e) {
    const { nickname } = e.detail.value
    if (!nickname.trim()) {
      wx.showToast({
        title: '请输入昵称',
        icon: 'none'
      })
      return
    }
    
    this.saveUserInfo(nickname)
  },
  
  saveUserInfo(nickname) {
    // 保存到本地或服务器
    wx.setStorageSync('nickname', nickname)
    wx.showToast({
      title: '保存成功'
    })
  }
})

写在最后

微信小程序的文档还是如此烂,大家只能一边恶心,一边用吧,珍重。

相关文档