一、注意事项
1、现在微信获取用户信息,都必须先经用户授权才可以进行获取,可以通过wx.getSetting查询有没有获得用户授权
2、如果用户没有授权就必须使用button的open-type="getUserInfo",然后用bindgetuserinfo="getUserInfocallback"回调传入用户信息
3、在这里声明一些回调函数注意点吧,同一个page是写不了回调函数的,同一个page为啥要回调呀,你直接把函数放进去就行了,就好像同一个类里你写了一个方法回调该类自己的方法,这不是犯傻嘛。你要在app.js上写回到函数才对。
比如A类有B、C方法,然后你B回调C方法???直接把C方法写入B方法不久好了嘛?干嘛还回调。
回调:A类的B方法回调D类的F方法
4、wx.login()方法可以获取临时凭证code,res.code,来获取你的服务端需要的access_token,session_key,openid。
在app.js--先在全局onlaunch函数获取当前用户设置,查询是否授权
wx.getSetting({
success: res => {
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
wx.getUserInfo({
success: res => {
// 可以将 res 发送给后台解码出 unionId
this.globalData.userInfo = res.userInfo
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res)
}
}
})
}
}
})
在index.js页面获取用户信息
<!--index.wxml-->
<view class="container">
<view class="userinfo">
<!--open-type getUserInfo 获取用户信息,可以从bindgetuserinfo回调中获取到用户信息-->
<button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
<block wx:else>
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</block>
</view>
<view class="usermotto">
<text class="user-motto">{{motto}}</text>
</view>
</view>
index.js
//初始化加载用户信息
onLoad: function () {
this.loadInfo();
},
//加载用户信息-在每一种情况都执行跳转
loadInfo: function(){
if (app.globalData.userInfo) {
//设置用户信息
this.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: true
})
this.switchTabPage(); //页面跳转
} else if (this.data.canIUse) {
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.userInfoReadyCallback = res => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
this.switchTabPage(); //页面跳转
}
} else {
// 在没有 open-type=getUserInfo 版本的兼容处理
wx.getUserInfo({
success: res => {
app.globalData.userInfo = res.userInfo
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
this.switchTabPage(); //页面跳转
}
})
}
},
//跳转到主页
switchTabPage: function(){
var userInfo = this.data.userInfo;
if(userInfo != null){
wx.navigateTo({
url: '../home/index',
})
}
},
//bindgetuserinfo回调中获取到用户信息,其实就是回调函数
getUserInfo: function(e) {
console.log("userInfo:",e.detail.userInfo)
app.globalData.userInfo = e.detail.userInfo
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
this.switchTabPage(); //页面跳转
}
})