小程序交流群:528215729,加入和小伙伴们一起探讨开发疑难、运营idea吧

admin

admin

发表于 2018-05-19 17:43:10

摘要:小程序填坑之路(四):微信登录获取unionid (微信小程序开发 - 微信 小程序外包开发-微信小程序 开发教程-微信小程序开发者社区,尽在 www.mntuku.cn)

在微信小程序中,因为各种各样的原因我们会需要获取到用户的unionid,但是小程序的wx.login()在一般情况下只能获取到openid,下面就简单来讲一下如何获取unionid以及当中的神坑

微信登录

在此之前,需要将微信开放平台绑定小程序,才可获取unionid

错误示例:

  wx.login({
    success: res => {
      // 登录凭证
      let _code = res.code;
      if (_code) {
        wx.request({
          url: https://api.weixin.qq.com/sns/jscode2session,
          data: {
             // 小程序注册时生成的appid
            appid: CONFIG.App.ID,
            // 小程序注册时生成的secret
            secret: CONFIG.App.SECRET,
            // wx.login()返回的登录凭证
            js_code: _code,
            // 固定值
            grant_type: authorization_code
          },
          success: res => {
            console.log(res.data.unionid);
          }
        })
      }
    },
    fail: res => {
      wx.showToast({
        title: 微信登录失败,
        duration: 1500
      });
    }
  });

由以上代码块可知,获取unionid主要分为以下两个步骤:
1. 调用wx.login()获取登录凭证code
2. 通过登录凭证code调用https://api.weixin.qq.com/sns/jscode2session接口,获取用户的unionid

注意了前方高能:

上述代码实现,表面上看起来没有什么问题,实际上在手机调试中以及开发工具的调式中也没有什么问题,但是如果你关闭手机调试,或者选择开发工具校验安全域名、TLS 版本以及 HTTPS 证书,你就会懵逼了,发现一直报错https://api.weixin.qq.com不在合法域名列表内,当你去微信小程序后台的开发设置中添加这个域名时,你会惊喜的发现https://api.weixin.qq.com这个域名不能添加,有木有很惊喜,有木有很意外!!!

解决方法:

将访问https://api.weixin.qq.com/sns/jscode2session获取unionid这个步骤交给后台去做,让后台给你返回(只能后台返回)!!!(在正式上线后,客户端是不能访问到https://api.weixin.qq.com/sns/jscode2session这个接口的

最后还有一种情况:

同一个微信开放平台下的相同主体的App、公众号、小程序,如果用户已经关注公众号,或者曾经登录过App或公众号,则用户打开小程序时,开发者可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。

所以开发者可以先通过wx.login()获取unionid,如果没有获取到,在调用后台获取unionid的接口,不必每次都直接调用后台获取unionid的接口,效率更高!

381阅读 | 1评论
你的回应
  • Ellchieby

    2018-06-06 06:23:36 Ellchieby

    Secure Buy Cialis Online Europ Priligy Customer Reviews п»їcialis Amoxicillin And Breast Feeding Kamagra Oral Jelly Holland Kamagra Gi