2023-07-07 wx.getUserProfile获取到的用户头像为灰色头像,昵称为【微信用户】?原来是 微信小程序无法通过 wx.getUserInfo 以及 wx.getUserProfile获取用户头像和昵称,解决方案==》手动触发open-type为chooseAvatar的button去拿到头像

发布时间 2023-07-07 16:33:56作者: 哎呦你可棒棒了

前言:微信的两个api【wx.getUserInfo】、【wx.getUserProfile】均不返回正确的昵称和头像了,在微信开发者工具中能获取到,但是体验版以及正式版小程序就一直获取到的是默认的灰色头像以及固定的昵称【微信用户】。

解决方案:只能通过手动触发open-type为chooseAvatar的button去拿到头像,包括昵称也是,如官方示例:

<button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
  <image class="avatar" src="{{avatarUrl}}"></image>
</button> 
<input type="nickname" class="weui-input" placeholder="请输入昵称"/>

const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'

Page({
  data: {
    avatarUrl: defaultAvatarUrl,
  },
  onChooseAvatar(e) {
    const { avatarUrl } = e.detail 
    this.setData({
      avatarUrl,
    })
  }
})

官方示例链接:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html

本来wx.getUserInfo被废了,官方推出了wx.getUserInfo,可以用后者返回的密文对象encryptedData来给后端解析拿到头像和昵称,结果2022年10月份,这个接口不返回值了,废了,以下是官方的说明:

   自 2022 年 10 月 25 日 24 时后(以下统称 “生效期” ),用户头像昵称获取规则将进行如下调整:

  1. 自生效期起,小程序 wx.getUserProfile 接口将被收回:生效期后发布的小程序新版本,通过 wx.getUserProfile 接口获取用户头像将统一返回默认灰色头像,昵称将统一返回 “微信用户”。生效期前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。
  2. 自生效期起,插件通过 wx.getUserInfo 接口获取用户昵称头像将被收回:生效期后发布的插件新版本,通过 wx.getUserInfo 接口获取用户头像将统一返回默认灰色头像,昵称将统一返回 “微信用户”。生效期前发布的插件版本不受影响,但如果要进行版本更新则需要进行适配。通过 wx.login 与 wx.getUserInfo 接口获取 openId、unionId 能力不受影响。
  3. 「头像昵称填写能力」支持获取用户头像昵称:如业务需获取用户头像昵称,可以使用「头像昵称填写能力」(基础库 2.21.2 版本开始支持,覆盖iOS与安卓微信 8.0.16 以上版本),具体实践可见下方《最佳实践》。
  4. 小程序 wx.getUserProfile 与插件 wx.getUserInfo 接口兼容基础库 2.27.1 以下版本的头像昵称获取需求:对于来自低版本的基础库与微信客户端的访问,小程序通过 wx.getUserProfile 接口将正常返回用户头像昵称,插件通过 wx.getUserInfo 接口将正常返回用户头像昵称,开发者可继续使用以上能力做向下兼容。

 官方原文链接:https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01

最后:别指望wx.getUserInfo、wx.getUserProfile,自己老老实实的写个弹窗让用户填写信息吧,要不就动态生成用户头像昵称,至于微信头像昵称,能拿则拿吧!