收藏
评论

getUserInfo兼容解决方案


最近微信突然改了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


这个方案只是为了做之前老接口的兼容处理的,新写的项目并不建议,个人觉得小程序授权这个操作,应该放到合理的位置调用,而不是一开始就调用。

最后一次编辑于  2018-05-16  (未经腾讯允许,不得转载)
赞 4
收藏

6 个评论

  • 执行吧提子tina
    执行吧提子tina
    2018-05-17

    棒棒哒!可以用!

    2018-05-17
    赞同 2
    回复 5
    • 吴院长
      吴院长
      2018-05-17
      谢谢支持哈。
      2018-05-17
      1
      回复
    • 执行吧提子tina
      执行吧提子tina
      2018-05-17回复吴院长
      我这是上线项目 不想改了 用这个判断蛮好的 不知道会不会再更新
      2018-05-17
      回复
    • 吴院长
      吴院长
      2018-05-17回复执行吧提子tina
      我看过微信最新的文档,现在受影响的是体验小程序,开发小程序,正式发布的小程序不受影响,但是以后也会受影响,所以还是尽快兼容比较好。
      2018-05-17
      回复
    • 执行吧提子tina
      执行吧提子tina
      2018-05-17回复吴院长
      嗯呢 我的意思是咱这段代码 以后会不会更新再被影响 正式版小程序我去找啥时候必须更新 也不说
      2018-05-17
      回复
    • 吴院长
      吴院长
      2018-05-17回复执行吧提子tina
      哦哦懂了,确实是
      2018-05-17
      回复
  • print_r()
    print_r()
    2018-05-17

    可以用,谢谢

    2018-05-17
    赞同 1
    回复
  • 手中沙
    手中沙
    2018-05-17

    看不懂,路过~

    2018-05-17
    赞同 1
    回复
  • 晓龙
    晓龙
    2018-05-17

    真的可以用!省大事了。

    2018-05-17
    赞同 1
    回复 1
    • 执行吧提子tina
      执行吧提子tina
      2018-05-17
      你也用啊 哈哈哈
      2018-05-17
      回复
  • 未来
    未来
    01-19

    mark一下

    01-19
    赞同
    回复
  • 易编科技〖Peter 〗
    易编科技〖Peter 〗
    2018-05-30

    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的获取用户这个接口怎么用您这个改下兼容

    2018-05-30
    赞同
    回复 1
    • 吴院长
      吴院长
      2018-05-30

      没太仔细看逻辑,应该是这里

      2018-05-30
      回复