在微信小程序中,获取用户信息时,可以通过开放数据校验和解密算法来获取用户的敏感数据(如用户的UnionID)。以下是一般的步骤:

步骤1:获取用户加密数据和签名:

用户点击授权按钮后,通过 wx.getUserInfo 获取到加密数据和签名。
wx.getUserInfo({
  success: function(res) {
    const encryptedData = res.encryptedData;
    const iv = res.iv;
    const signature = res.signature;
    // 其他处理...
  },
  fail: function(err) {
    console.error('获取用户信息失败:', err);
  }
});

步骤2:发起网络请求向微信开放平台校验数据:

将获取到的加密数据、IV(初始向量)和签名发送到微信开放平台的服务器进行校验。
wx.request({
  url: 'https://api.weixin.qq.com/sns/jscode2session',
  method: 'GET',
  data: {
    appid: '你的小程序AppID',
    secret: '你的小程序AppSecret',
    js_code: '用户登录获取的code',
    grant_type: 'authorization_code'
  },
  success: function (res) {
    const sessionKey = res.data.session_key;
    // 将获取到的 sessionKey、加密数据和 IV 发送到后台服务器
    // 后台服务器通过 sessionKey 解密加密数据
    // 具体的解密算法可参考微信小程序官方文档
  },
  fail: function (err) {
    console.error('校验数据失败:', err);
  }
});

步骤3:后台服务器进行解密:

在后台服务器中,通过微信提供的解密算法,使用获取到的 session_key、加密数据和 IV 来解密用户的敏感数据。

具体的解密算法可参考微信小程序官方文档提供的[解密算法](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html)。
const crypto = require('crypto');

function decryptData(encryptedData, sessionKey, iv) {
  const sessionKeyBuffer = Buffer.from(sessionKey, 'base64');
  const encryptedDataBuffer = Buffer.from(encryptedData, 'base64');
  const ivBuffer = Buffer.from(iv, 'base64');

  try {
    const decipher = crypto.createDecipheriv('aes-128-cbc', sessionKeyBuffer, ivBuffer);
    let decoded = decipher.update(encryptedDataBuffer, 'binary', 'utf8');
    decoded += decipher.final('utf8');
    return JSON.parse(decoded);
  } catch (err) {
    console.error('解密失败:', err);
    return null;
  }
}

// 使用方法
const decryptedData = decryptData(encryptedData, sessionKey, iv);
console.log('解密后的数据:', decryptedData);

注意事项:

1. 开放数据校验需要在后台服务器进行:
   - 敏感数据的解密需要在安全的后台服务器进行,不应该在小程序端进行。

2. 保护 session_key 的安全性:
   - 开发者需要注意保护 session_key 的安全性,不应该在小程序端暴露 session_key。

3. 及时更新 session_key:
   - session_key 有时效性,建议在用户每次登录时,都重新获取一次 session_key。

以上是一般的开放数据校验和解密的流程。实际上,微信提供了一些辅助函数来进行开放数据校验和解密,开发者可以根据实际情况选择使用。详细的使用方法和参数说明可以参考微信小程序官方文档。


转载请注明出处:http://www.zyzy.cn/article/detail/665/微信小程序