1、app.js中的代码如下:
onLaunch: function() {
// debug
var that = this;
console.log(’>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>’);
var that = this;
// 获取用户信息
wx.getSetting({
success: res => {
if (res.authSetting[‘scope.userInfo’]) {
console.log(’=============已经授权过了=============’);
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
wx.getUserInfo({
success: res => {
// 可以将 res 发送给后台解码出 unionId
that.globalData.g_userInfo = res.userInfo
// 直接登录主页
wx.switchTab({
url: ‘/pages/home/home’
})
}
})
} else {
console.log(’=============还没授权过了=============’);
wx.navigateTo({
url: ‘/pages/index/index’
})
}
}
});
// 获取状态栏高度,并存储为全局变量
wx.getSystemInfo({
success(res) {
that.globalData.g_statusBarHeight = res.statusBarHeight
}
})
}
上述实现思路是:如果用户已经授权过,则直接进入home页,否则进入到index页
2、在index页,有一个按钮让用户选择授权后微信登录,通过微信openid取得后台数据库的用户信息,核心代码如下:
<view class=“journey-container”>
<button wx:if="{{canIUse}}" open-type=“getUserInfo” bindgetuserinfo=“bindGetUserInfo”>授权登录开启健康之旅</button>
<view wx:else>请您升级微信版本</view>
</view>
/**
* 微信登录
*/
bindGetUserInfo: function(e) {
var that = this;
that.writeLog(“1:” + JSON.stringify(e.detail.userInfo));
if (e.detail.userInfo) {
that.writeLog(“2:” + JSON.stringify(e.detail.userInfo));
// 用户许可了
// 微信登录状态
var rawDataJson = JSON.parse(e.detail.rawData);
var userName = rawDataJson.nickName;
var country = rawDataJson.country;
var province = rawDataJson.province;
var city = rawDataJson.city;
var sex = (rawDataJson.gender == 1) ? ‘M’ : ‘F’;
var headImg = rawDataJson.avatarUrl;
console.log(‘rawDataJson=’ + JSON.stringify(rawDataJson));
wx.login({
success: function (lres) {
console.log(“登录code=” + lres.code);
that.writeLog(“3:” + JSON.stringify(lres.code));
wx.request({
url: app.globalData.g_domain + ‘/rk-wxLogin.php?code=’ + lres.code,
method: ‘GET’,
success: function (rres) {
that.writeLog(“4:” + JSON.stringify(rres));
console.log(‘rk-wxLogin=’ + JSON.stringify(rres));
var jsonLogin = JSON.parse(rres.data);
var sessionKey = jsonLogin.session_key;
var openId = jsonLogin.openid;
// 绑定微信用户
wx.request({
url: app.globalData.g_domain + ‘/rk-createWxUser.php’,
data: {
openId: openId,
userName: userName,
country: country,
province: province,
city: city,
sex: sex,
headImg: headImg
},
success: function (cres) {
that.writeLog(“5:” + JSON.stringify(cres));
console.log(‘cres=’ + JSON.stringify(cres));
// 如果创建成功
if (cres.data.result) {
wx.setStorageSync(‘user’, cres.data.user);
app.globalData.g_userInfo = cres.data.user;
that.setData({
userInfo: cres.data.user
});
wx.switchTab({
url: ‘/pages/home/home’
});
} else {
// 显示错误信息
that.setData({
“pageDialog.display”: true,
“pageDialog.msg”: ‘微信登录时遇到问题了’
})
}
},
fail: function (cerr) {
console.log(‘cerr=’ + JSON.stringify(cerr));
that.setData({
“pageDialog.display”: true,
“pageDialog.msg”: JSON.stringify(cerr)
})
}
})
}
});
}
})
} else {
console.log(111);
// 用户拒绝了
wx.showModal({
content: ‘您已经拒绝授权,请稍后再试吧~’
})
}
},
上述后台调用时,如果该微信用户已经存在,则返回后台用户信息,否则先创建微信用户(我自己的业务)后返回后台用户信息,简单说就是db中的用户信息。
现在的问题是:
1、本地调试及真机,都没有问题。我通过清除缓存来释放用户缓存,然后用户就可以进入index页面了。
2、在本地调试及真机,在index页面,点击授权按钮后(第一次会弹出授权对话框),可以正常进入home页面。
3、但是提交到后台后,体验版本里,第一次可以正常进入home,但没有走我取得用户信息的脚本,未取得用户信息。清除缓存后,重新进入index页面后,再次点击授权按钮,没有任何反应。
此问题困扰我多日,请各位指导指导。