アクセスunionid、認証なしを含むマイクロ手紙サインイン、

1、にオープンプラットフォームが微信登録したアカウントは、関連付けアプレット
関連するアプレットの例
2、関連するパラメータへのアプレットのアクセスは、独自のサーバーの舞台裏に提出する
ユーザーの承認を必要とし、次の操作をした後:

wx.login({
  success (res) {  
    if (res.code) {
      //获取到code(用户登录凭证)
       wx.getUserInfo({
         success: function(resp) {
           //获取到encryptedData(加密数据)和iv(偏移量)
           //发起网络请求,将code、encryptedData和iv都提交到自己服务器后台
           wx.request({
            url: 'https://test.com/onLogin',
            data: {
              code: res.code,
              encryptedData: resp.encryptedData,
              iv: resp.iv
            }
          })
         }
       })      
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

コードSESSIONKEY(独自のサーバー側を行う)ことにより得られる3、
:access_tokenは、以下のリンクを要求するために、アプレットのコードによって提供されたパラメータを取る
https://api.weixin.qq.com/sns/oauth2/jscode2session?appid=APPID&secret=SECRET&js_code = CODE&grant_type = authorization_code
パラメータ説明

パラメータ あなたがする必要がありますか 説明
APPID それはあります 固有の識別を適用した後、微信オープンプラットフォームでの承認申請の提出を取得します
秘密 それはあります    アプリケーションキーAppSecretは、微信オープンプラットフォームで監査を通じて申請書を提出します
コード それはあります   コードのパラメータを入力し、最初のステップを買収します
grant_type それはあります   填authorization_code
@Override
public String getSessionKey(String appid, String appSecret, String code) {
    try {
        String pattern = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&grant_type=authorization_code&js_code=%s";
        String url = String.format(Locale.ENGLISH, pattern, appid, appSecret, code);
        ConvertedResponse<String> response = EasyHttp.executeGet(url, new StringResponseConverter());
        if (response.convertedResponse != null) {
            log.debug(response.convertedResponse);
            JSONObject jsonObject = JSON.parseObject(response.convertedResponse);
            return jsonObject.getString("session_key");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

正しく返します。

{
    "errcode":0,
    "errmsg":"",
    "openid":"OPEN_ID",
    "session_key":"SESSION_KEY",
    "uin":"",
    "unionid":"UNION_ID"
}

図4は、ユーザ情報を解読するための
正しい復号化は、全体のサードパーティの登録が完了した場合、復号化は、ログインに失敗した失敗し、ステップには現在、復号化するために、前のステップSESSIONKEYとアプレットはEncryptedDataとIVが提供する、unionIdを取得することであったユーザー情報を取得します。

@Override
public String decryptUserInfo(String encryptedData, String iv, String sessionKey) {
    try {
        byte[] data = Base64.decodeBase64(encryptedData);
        byte[] aseKey = Base64.decodeBase64(sessionKey);
        byte[] ivData = Base64.decodeBase64(iv);
        // 如果密钥不足16位,那么就补足
        int base = 16;
        if (aseKey.length % base != 0) {
            int groups = aseKey.length / base + 1;
            byte[] temp = new byte[groups * base];
            Arrays.fill(temp, (byte) 0);
            System.arraycopy(aseKey, 0, temp, 0, aseKey.length);
            aseKey = temp;
        }
        Security.addProvider(new BouncyCastleProvider());
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
        SecretKeySpec spec = new SecretKeySpec(aseKey, "AES");
        AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
        params.init(new IvParameterSpec(ivData));
        cipher.init(Cipher.DECRYPT_MODE, spec, params);
        byte[] result = cipher.doFinal(data);
        String info = new String(result, StandardCharsets.UTF_8);
        log.debug(info);
        return info;
    } catch (Exception e) {
        log.error(e.getLocalizedMessage(), e);
        return null;
    }
}

正しい復号結果:

{
  "openId": "OPENID",
  "nickName": "NICKNAME",
  "gender": GENDER,
  "city": "CITY",
  "province": "PROVINCE",
  "country": "COUNTRY",
  "avatarUrl": "AVATARURL",
  "unionId": "UNIONID",
  "watermark": {
    "appid":"APPID",
    "timestamp":TIMESTAMP
  }
}

マイクロチャネルは、経験をスイープ:

体験A

おすすめ

転載: www.cnblogs.com/wandersnail/p/12356596.html