app/公众号/小程序微信登录之后为什么要用unionid作为唯一标识

app/公众号/小程序微信登录之后为什么要用unionid作为唯一标识,由于三端微信openid不一致,导致微信在三端登录之后会生成3个用户。而三端在微信开放平台互相绑定之后会有一个唯一的uniodid。注意,一定要在开放平台绑定公众平台和小程序的appid之后才嗯那个获取到unionid.

具体获取unionid的代码就不贴出来了。可以后端去获取,也可以前端获取之后传给后端。微信官方文档说的还是比较清楚的。 我防止小白,这里也贴一下代码吧:

public Map getOpenidByCode1( String code,Integer type) {
      initWxConfig(false);
      Map parmas = new HashMap();
      HttpClient client = new HttpClient();
      String resultStr = null;
      parmas.put("grant_type", "authorization_code");
      if (type == 1) {//小程序参数
         parmas.put("appid", APPID_X);
         parmas.put("secret", APPSECRET_X);
         parmas.put("js_code", code);
         resultStr = client.get("https://api.weixin.qq.com/sns/jscode2session", parmas);
      }
    if (type == 2) {//公众号参数
       parmas.put("appid", APPID_G);
       parmas.put("secret", APPSECRET_G);
       parmas.put("code", code);
       resultStr = client.get("https://api.weixin.qq.com/sns/oauth2/access_token", parmas);
    }
      JSONObject result = JSONObject.parseObject(resultStr);
      checkErr(result);
      Map body = new HashMap();
      String openid = result.getString("openid");
      String unionid = result.getString("unionid");
      body.put("openId", openid);
      body.put("unionid",unionid );
      System.out.println(unionid);
      return body;

   }

 

private void checkErr(JSONObject result) {
   if(result == null){
      return ;
   }
   String errcode = result.getString("errcode");
   if (StringUtils.isEmpty(errcode)) {
      return;
   }
   if ("0".equals(errcode)) {
      return;
   }

   if ("40014".equals(errcode) || "42001".equals(errcode) ) {
      /**/if (lock.tryLock()) {
         try {
            token();
         } finally {
            lock.unlock();
         }
      }
   }

   throw new BizException(Code.ERR_CODE);
}

 

你可能感兴趣的:(微信登录)