最近微信突然改了wx.getUserInfo()接口的获取规则,花了点时间研究了下,整理了一个比较通用的解决方案。
话不多说直接上代码:
wx.getUserInfo({
success: function (userResult) {
//之前获取用户信息成功的逻辑代码
},
fail: function (userError) {
//这里的逻辑判断可能有人会好奇,为啥要有的加冒号,通过测试发现,开发工具上微信推送的消息是不带冒号的。而实际使用环境中微信推送的是带冒号的,所以就都写了。
if (userError.errMsg == 'getUserInfo:fail scope unauthorized' || userError.errMsg == 'getUserInfo:fail auth deny' || userError.errMsg == 'getUserInfo:fail:scope unauthorized' || userError.errMsg == 'getUserInfo:fail:auth deny' ){
wx.navigateTo({
url: '/pages/auth/auth'
})
}else{
//之前获取用户信息失败的逻辑代码
}
},
});
},
fail: function (loginError) {
},
});
然后再加个页面就好了,github地址:https://github.com/PhoenixTreeWD/wxauth
这个方案只是为了做之前老接口的兼容处理的,新写的项目并不建议,个人觉得小程序授权这个操作,应该放到合理的位置调用,而不是一开始就调用。
棒棒哒!可以用!
可以用,谢谢
看不懂,路过~
真的可以用!省大事了。
mark一下
App({
siteInfo: require("siteinfo.js"),
util: require("wx/resource/js/util.js"),
commonjs: require("wx/resource/js/common.js"),
onLaunch: function() {
var e = wx.getStorageSync("logs") || [];
e.unshift(Date.now()), wx.setStorageSync("logs", e), this.getuserInfo();
},
getuserInfo: function() {
var e = this, o = this;
wx.login({
success: function(e) {
e.code ? wx.request({
url: o.util.dourl("apiuser", {
op: "openid"
}),
data: {
code: e.code
},
header: {
"content-type": "application/json"
},
success: function(e) {
console.log(e.data), console.log(o.scene), e.data.errno || (o.openid = e.data.data.openid,
void 0 != o.scene && "" != o.scene && o.checkuser());
}
}) : console.log("获取用户登录态失败!" + e.errMsg);
}
}), wx.getSetting({
success: function(n) {
wx.getUserInfo({
success: function(n) {
o.userInfo = n.userInfo, console.log(o.userInfo), e.userInfoReadyCallback && e.userInfoReadyCallback(n);
}
});
}
});
},
getcomplaint: function() {
var e = this;
e.complaint = 0, wx.request({
url: e.util.dourl("apiuser", {
op: "openid"
}),
data: {},
header: {
"content-type": "application/json"
},
success: function(o) {
console.log(o.data), console.log(e.scene), o.data.errno;
}
});
},
globalData: {
userInfo: null,
wechatconfig: []
},
openid: null,
userInfo: null,
gocomplain: function() {
wx.navigateTo({
url: "../complain/complain"
});
},
checkuser: function() {
console.log("123");
var e = this;
wx.request({
url: e.util.dourl("apiuser", {
op: "check"
}),
data: {
openid: e.openid
},
header: {
"content-type": "application/json"
},
success: function(o) {
console.log(o.data), o.data.errno || 1 == o.data.data.user_vip && wx.navigateTo({
url: "../register/register?share_from=" + e.scene
});
}
});
}
});
大神 请教一下 我这个app.js的获取用户这个接口怎么用您这个改下兼容
没太仔细看逻辑,应该是这里