uni-app获取微信UnionID

2020-04-02  本文已影响0人  橙小光

最近开发一款app、H5、微信小程序四合一的uniApp应用 - 职教圈APP
微信登录的唯一识别码是app和小程序互通的key值,所以在微信登录时需要获取到

第一步:
必须在微信开发平台上将app等应用配置好
登录微信开放平台 → 管理中心
这样绑定的应用都是共用同一UnionID

第二步:
uni-app登录代码

login_weixin_min() {
      var vm = this;
      uni.login({
        provider: "weixin",
        success: function(loginRes) {
          uni.getUserInfo({
            provider: "weixin",
            success: function(info) {
             // vm.apiWechatMiniLogin(
             //  loginRes.code,
             //   info.userInfo.unionId,
             //   info.userInfo.nickName,
             //   info.userInfo.avatarUrl
            //  );
              console.log("loginRes", loginRes);
              console.log("info", info);
            },
            fail: err => {
              uni.showToast({
                title: "微信登录失败",
                icon: "none"
              });
            }
          });
        }
      });
    },

第三步:
APP直接可以获取到 info.userInfo.unionId
小程序则分为很多种情况


image.png

获取参数调用微信开放api:jscode2session

里面的参数替换成自己小程序的ID和uni.login 获取的code
https://api.weixin.qq.com/sns/jscode2session?appid=wx6cff75e198834c49&secret=xxx53565a78a3b994e0e50e302xxxxxx&js_code=033595Iw0zZEgd1rhfEw0SILHw0595If&grant_type=authorization_code

UnionID 机制说明 参考微信开发文档:
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html

第四步:
微信小程序获取unionId的过程是
uni.login 获取 code → uni.getUserInfo 获取encryptedData和iv → 调用微信开放api:jscode2session →
获取session_key → 通过code,encryptedData,iv ,session_key解密出unionId→ 登录注册

注:
1.上面的流程是完整的流程,应该不能落下任何一步;
2.有时候调用微信开放api:jscode2session 可以直接拿到unionId,有时候拿不到是因为,在小程序授权微信号之前,APP开发时已经授权了或者微信绑定过和小程序绑定在一起的公众后等等情况,反正不能依赖这种方式,可以在调用之后做个判断,如果有了unionId就不用解密了;
3.我在用uniapp目前有个问题没找到解决方式,微信授权的页面提示只在第一次授权的时候出现,后面就不再出现了,不能清除授权,影响不大,但是刚开始开发的时候有很多误解,所以还是希望能做到可以清除授权避免给用户造成误解。
4.微信小程序的解密一般放在后台进行,因为涉及调用其他网站请求api,正式版的小程序调不通,后面的AES解密 我是参考这篇博文的:https://blog.csdn.net/h_a_h_ahahah/article/details/80404435

上一篇 下一篇

猜你喜欢

热点阅读