微信小程序如何获取UnionId详细版---Crypto.js解密

前言:查看小程序的官方文档UnionID 机制说明
在这里插入图片描述

  • 首先,我没有公众号,也不是云开发,所以只能使用第一种方法调用接口 wx.getUserInfo
    注意!!!一定要先去微信开放平台绑定你的小程序,否则即使解密之后也无法获取UnionId,切记是微信开放平台,不是微信公众平台!

  • 其次,由于UnionId是敏感数据,所以单纯的wx.getUserInfo是不会返回给你 的,这就需要使用 加密数据解密算法。 官网有提供如何解密的demo,但是居然没有JavaScript也没有Java。所以接下来说下纯js如何获取 unionid。
    -

  • 第一步:登录微信开放平台 — 管理中心 — 小程序 — 绑定小程序
    在这里插入图片描述

  • 第二步:下载解密文件,放入小程序的目录中,我是放在utils底下。点击下载提取码:3ey9 。注意!!路径需要根据你的实际情况稍加修改。

  • 第三步:wxml文件中绑定事件

<button open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权登录</button>
  • 第四步:js中调用解密方法
//路径根据你文件存放位置进行修改
var WXBizDataCrypt = require('../../../../utils/WXBizDataCrypt.js');

  //微信登录
  getUserInfo: function (e) {
    var AppId = '你小程序ID'
    var AppSecret = ''小程序密钥,可以在微信公众后台--开发--开发设置中找到"  
    if (e.detail.iv == undefined) { //如何用户拒绝授权
      wx.showToast({
        title: '登录失败!',
        icon: 'none'
      })
      return
    }
    wx.login({    //调用登录接口,获取 code
      success: function (res) {
        wx.request({
          url: 'https://api.weixin.qq.com/sns/jscode2session',
          data: {
            appid: AppId,
            secret: AppSecret,
            js_code: res.code,
            grant_type: 'authorization_code'
          },
          success: function (res) {
            var pc = new WXBizDataCrypt(AppId, res.data.session_key)
            wx.getUserInfo({
              success: function (res) {
                var data = pc.decryptData(res.encryptedData, res.iv)
                console.log('解密数据: ', data)
              }
            })
          }
        });
      }
    })
  },

最后:附上我解密后的数据
在这里插入图片描述
!!注意:‘https://api.weixin.qq.com’这个只能在微信开发工具中(不校验合法域名的情况下)使用,在正式环境中是无法使用的。所以可以让后端人员请求接口将参数返回回来进行解密,或者直接让后端解密也行。
在这里插入图片描述
在这里插入图片描述

附:感谢蔡-Rd,他的博客里也有提供解密文件下载,但是很多没用到,所以我删除了一些不必要的文件。并且在他的基础上详细的说了些注意事项。

微信小程序获取unionid的步骤如下: 1. 开发者在小程序后台配置小程序的AppID、AppSecret以及启用相关的接口权限。 2. 用户在小程序中进行登录,获取到用户的openid和session_key。 3. 利用session_key进行解密获取到用户的用户敏感数据,其中包括unionid。 4. 使用解密后的unionid,开发者可以将其与用户在小程序中的其他信息进行关联,方便后续业务的处理。 根据上述步骤,下面是一个示例代码片段来实现获取unionid的功能: ```javascript // 根据用户的code获取用户的openid和session_key wx.login({ success: function(res) { if (res.code) { // 发起网络请求,调用后台接口获取openid和session_key wx.request({ url: 'https://api.weixin.qq.com/sns/jscode2session', data: { appid: 'wxXXXXXXXXXXXXXXX', // 小程序的AppID secret: 'XXXXXXXXXXXXXXXXX', // 小程序的AppSecret js_code: res.code, grant_type: 'authorization_code' }, success: function(res) { var openid = res.data.openid; var sessionKey = res.data.session_key; // 解密用户敏感数据,获取unionid var encryptedData = "XXXXXXXXXXXXXXXXX"; // 用户加密的数据 var iv = "XXXXXXXXXXXXXXXXX"; // 加密算法的初始向量 var pc = new WXBizDataCrypt(appId, sessionKey); var data = pc.decryptData(encryptedData , iv); var unionId = data.unionId; // 将unionid与其他用户信息关联存储 // TODO: 进行后续业务处理 } }); } else { console.log('登录失败!' + res.errMsg); } } }); ``` 其中,需要开发者自行实现一个WXBizDataCrypt类,用于解密用户敏感数据,可以参考微信官方提供的相关文档进行实现。 这样,开发者就可以在小程序获取到用户的unionid,方便后续的用户关联及业务处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值