收藏
回答

有获取unionid得实例嘛

回答关注问题邀请回答
收藏

4 个回答

  • 杨泉
    杨泉
    2023-01-29

    UnionID 机制说明

    如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的。

    UnionID获取途径

    绑定了开发者帐号的小程序,可以通过以下途径获取 UnionID。

    1. 开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户授权。
    2. 小程序端调用云函数时,可在云函数中通过 Cloud.getWXContext 获取 UnionID。
    3. 用户在小程序(暂不支持小游戏)中支付完成后,开发者可以直接通过getPaidUnionId接口获取该用户的 UnionID,无需用户授权。注意:本接口仅在用户支付完成后的5分钟内有效,请开发者妥善处理。


    云开发版本

    const cloud = require('wx-server-sdk')
    
    exports.main = async (event, context) => {
      const {
        OPENID,
        APPID,
        UNIONID,
        ENV,
      } = cloud.getWXContext()
    
      return {
        OPENID,
        APPID,
        UNIONID,
        ENV,
      }
    }
    


    传统版本前端部分:

    wx.login({
      success (res) {
        if (res.code) {
          //发起网络请求
          wx.request({
            url: 'https://example.com/onLogin',
            data: {
              code: res.code
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })
    


    后端code2session拿到unionid:

    java版:

    1. 安装并导入微信开放平台 Java SDK。

    2. 使用 code 换取 session_key 和 openID。

    String appId = "your appId";
    String secret = "your secret";
    String code = "the code got from frontend";
    String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appId + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code";
    String result = HttpUtils.get(url);
    JSONObject json = JSON.parseObject(result);
    String sessionKey = json.getString("session_key");
    String openId = json.getString("openid");
    

    3.解密用户加密数据,获取 UnionID。

    byte[] encryptedDataBytes = Base64.getDecoder().decode(encryptedData);
    byte[] ivBytes = Base64.getDecoder().decode(iv);
    byte[] sessionKeyBytes = Base64.getDecoder().decode(sessionKey);
    AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivBytes);
    SecretKeySpec keySpec = new SecretKeySpec(sessionKeyBytes, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
    byte[] resultBytes = cipher.doFinal(encryptedDataBytes);
    String result = new String(resultBytes, "UTF-8");
    JSONObject json = JSON.parseObject(result);
    String unionId = json.getString("unionId");
    

    4.返回unionid给前端

    2023-01-29
    有用
    回复 1
    • 青寒
      青寒
      2023-01-29
      这么有条理,是gpt么?
      2023-01-29
      回复
  • 九歌^
    九歌^
    2023-01-29

    小程序调用wx.login 返回的code 传给服务端(调用该接口https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html)解密出unionId

    2023-01-29
    有用
    回复
  • 鱼饼🦦
    鱼饼🦦
    2023-01-29

    获取openid符合条件就能看到unionid了

    2023-01-29
    有用
    回复
  • 毛翼
    毛翼
    2023-01-29

    文档上有例子啊

    2023-01-29
    有用
    回复
登录 后发表内容