收藏
回答

使用button引导用户授权时,点击授权按钮为什么没有反应呢?

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页面后,再次点击授权按钮,没有任何反应。

此问题困扰我多日,请各位指导指导。

最后一次编辑于  11-08
回答关注问题邀请回答
收藏

3 个回答

  • 银
    11-08

    还不如截图

    11-08
    赞同 1
    回复 1
    • 福大亨
      福大亨
      11-08
      11-08
      回复
  • 福大亨
    福大亨
    11-08

    第一次发问题,不是很熟悉。代码有点多,截图怕看不清

    11-08
    赞同
    回复
  • 子不语
    子不语
    11-08

    建议截图代码,而不是直接发。搞个代码片段也行

    11-08
    赞同
    回复 4
    • 福大亨
      福大亨
      11-08
      11-08
      回复
    • 子不语
      子不语
      11-08回复福大亨
      是不是你后台没添加域名到白名单,导致网络请求(request)失效。你在开发者工具里面,把【不校验域名】这个勾去掉试试看
      11-08
      1
      回复
    • 福大亨
      福大亨
      11-08
      确实如此,太感谢你啦!!!把客户的域名增加到白名单后,已经正常了。再次感谢,解我三日忧愁
      11-08
      回复
    • 子不语
      子不语
      11-08回复福大亨
      没事
      11-08
      回复
问题标签