<tui-button shape="circle" shadow type="green" height="88rpx" openType="getUserInfo" @getuserinfo="bindgetuserinfo">
<image src="../../static/images/weichat.png"></image>
微信登陆
</tui-button>
bindgetuserinfo(res){
uni.showLoading({
title: '加载中',
mask: true
});
let userInfo = {};
userInfo = {...res.userInfo};
if (res.errMsg === 'getUserInfo:ok') {
//小程序登陆
wx.login({
success:(res) => {
if (res.code) {
//根据code获取unionid
this.$func.api(this.$apiConfig.wxLogin(),{
code: res.code
},res => {
if(res.secToken){
userInfo.secToken = res.secToken;
userInfo.userId = res.userId;
uni.setStorageSync('userInfo', userInfo)
console.log('userInfo', userInfo)
uni.switchTab({
url:'/pages/classify/classify'
})
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
},
})
}else{
uni.hideLoading()
console.log('取消授权');
}
},
但是,发现在开发者工具下,正常,在手机下,就是获取不到,头像是灰色的默认头像,昵称始终是“微信用户”,都快急死了。一开始以为是渲染的问题,但是发现从一开始就是错误的,bindgetuserinfo根本获取不到。后来才知道,这种方式已经被弃用,要使用wx.getUserProfile来获取。wx.getUserProfile的使用方法和bindgetuserinfo有本质区别,bindgetuserinfo需要给开放权限openType,并且必须是按钮上。但是wx.getUserProfile不一样,直接触发即可,会弹出授权窗口,授权后就能获取到。代码如下:
<view shape="circle" shadow type="green" height="88rpx" @click="doLoginWX">
<image src="../../static/images/weichat.png"></image>
微信登陆
</view>
doLoginWX(){
wx.getUserProfile({
desc: "获取你的昵称、头像、地区及性别",
success: res => {
let userInfo = {};
userInfo = {...res.userInfo};
//小程序登陆
wx.login({
success:(res) => {
if (res.code) {
//根据code获取unionid
this.$func.api(this.$apiConfig.wxLogin(),{
code: res.code
},res => {
if(res.secToken){
userInfo.secToken = res.secToken;
userInfo.userId = res.userId;
uni.setStorageSync('userInfo', userInfo)
console.log('userInfo', userInfo)
uni.switchTab({
url:'/pages/classify/classify'
})
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
},
})
},
fail: res => {
//拒绝授权
this.$func.msg('登录失败,您拒绝了请求')
return;
}
})
},
