微信官方公告:https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01
wx.getUserProfile 接口将被收回
wx.getUserInfo 接口获取用户昵称头像将被收回
「头像昵称填写能力」支持获取用户头像昵称
解决办法:使用官方推荐的头像昵称填写能力
获取头像方法:
<view>头像</view>
<button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
<image class="avatar" :src="userAvatarUrl"></image>
</button>
onChooseAvatar(e) {
console.log("用户选择的头像", e.detail);
const { avatarUrl } = e.detail //avatarUrl:临时文件
}
获取头像,当用户点击微信头像按钮
会从avatarUrl中获取到临时文件,这个临时文件是有jepg的后缀的,但是如果从相册获取的图片,那么是没有后缀的。无论是以上拿两种情况都需要保存到自己的开发服务器,因为临时文件,随时都会失效。特别注意的是如果是没有后缀的临时文件,传到后端,需要让后端去做判断,如果没后缀就手动添加上。希望大家注意这个坑。
上传文件在只能用不能用uni.request因为data参数不支持fromData格式
onChooseAvatar(e) {
console.log("用户选择的头像", e.detail);
const { avatarUrl } = e.detail
this.userAvatarUrl = avatarUrl
let token = uni.getStorageSync('token')
uni.uploadFile({
url: `${config.baseUrl}/user/message/avatar`,
filePath: avatarUrl,
// formData:{type:3},
name: "file",//这个name很关键,后端就是从这里取二进制文件
header: {
Authorization: token,
},
success: (res) => {
let res1 = JSON.parse(res.data) //必须转,res是字符串
if (res1.state === 1) {
this.userAvatarUrl = res1.content
this.updataInfo() //更新用户信息
}
},
fail: (error) => {
console.log("头像出错", error);
uni.$u.toast('头像上传出错')
}
})
},
获取昵称方法:
<view>昵称</view>
<input type="nickname" class="ipt" v-model="nickname" placeholder="请输入昵称" />
这里注意有个坑,在用编译器开发的时候如果选择了微信昵称那么v-model不会实时更新,控制台打印出来的是之前的值。但是真机测试就是好着的。