关于微信小程序获取用户唯一码

第一种方式:获取OpenID的流程

  1. 前端调用 wx.login 获取临时凭证 code

wx.login({
  success: (res) => {
    if (res.code) {
      // 将 code 发送到服务器
      wx.request({
        url: 'https://your-server.com/login',
        data: { code: res.code }
      });
    }
  }
});

2.服务器用 code 换取 OpenID

向微信接口 https://api.weixin.qq.com/sns/jscode2session 发送请求:

复制

GET https://api.weixin.qq.com/sns/jscode2session?
  appid=APPID&
  secret=SECRET&
  js_code=CODE&
  grant_type=authorization_code
  • 响应示例:

复制

{
  "openid": "USER_OPENID",
  "session_key": "SESSION_KEY",
  "unionid": "UNIONID" // 如果满足条件则返回
}

实际调用示例:

微信返回:

{errMsg: "login:ok", code: "0c1b7Kll2EeGjf4XUGll2n0VDy1b7KlB"}

请求接口:

https://api.weixin.qq.com/sns/jscode2session?appid=wx0d69d5e30f63a4d7&secret=a9a51c03e5fd7fd708538e2b3af19ea8&js_code=0c1b7Kll2EeGjf4XUGll2n0VDy1b7KlB&grant_type=authorization_code

结果:获取到用户唯一openId

注意事项:需要小程序管理端生成密钥

OpenID特点:

同一用户在同一小程序中的唯一标识。

不同小程序中的同一用户OpenID不同。

无需用户授权,通过登录流程即可获取。

第二种方式:获取UnionID的流程

通过用户授权解密数据

  • 前端获取加密数据:复制

wx.getUserProfile({
  desc: '用于获取UnionID',
  success: (res) => {
    const encryptedData = res.encryptedData;
    const iv = res.iv;
    // 发送 encryptedData 和 iv 到服务器
  }
});
  • 服务器解密数据:
    使用 session_key 解密 encryptedData,得到包含 unionid 的用户信息。

代码示例(服务器解密)

const crypto = require('crypto');
function decryptData(encryptedData, iv, sessionKey) {
  const decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv);
  let decoded = decipher.update(encryptedData, 'base64', 'utf8');
  decoded += decipher.final('utf8');
  return JSON.parse(decoded);
}

本地测试代码:

UnionID

同一用户在微信开放平台下的所有应用(小程序、公众号、App等)中的唯一标识。

需满足条件:小程序已绑定到开放平台,且用户在同平台其他应用登录过。

可能需要用户授权才能获取。

缺点需要用户点击按钮才能进行获取数据,不能直接在加载页面进行获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值