残笑Z 2021-03-21 20:33 采纳率: 0%
浏览 469

微信小程序JAVA端手机号授权

 

是这样的,我没有做过微信小程序,我有一个接口,授权手机号码,今天看了很多笔记

大致流程是这样:

1.前端调接口,得到Code等返回信息

2.后台通过Code得到加密信息,sessionKey,openID等

3.后台解密得到信息,返回

 

但是我的接口文档,写着,就传一个手机号给我?不是还需要其他参数吗?

而且这些步骤都对应一个接口,按道理来说,在下图的加密信息解密Controller,不是已经将用户信息全部返回了吗?

那我这个授权手机号接口,到底是干什么?完全不懂,有大佬解释一下吗?跪谢

 

  • 写回答

1条回答 默认 最新

  • CSDN问答专家001 2021-03-21 21:41
    关注

    你上面的流程是对的,前端请求后端接口时传递

    sessionKey、phoneEncryptedData、phoneEncryptedIv、userEncryptedData和userEncryptedIv

    后端拿到数据后进行解密即可:

    sessionKey、userEncryptedData和userEncryptedIv可以对应解析出用户信息(openid、unoinid、nickName和avatarUrl);sessionKey、phoneEncryptedData、phoneEncryptedIv可以解密出用户手机号码purePhoneNumber

    /**
         * 小程序 数据解密
         *
         * @param encryptData 加密数据
         * @param iv          对称解密算法初始向量
         * @param sessionKey  对称解密秘钥
         * @return 解密数据
         */
        public static String wxDecrypt(String encryptData, String iv, String sessionKey) throws Exception {
            AlgorithmParameters algorithmParameters = AlgorithmParameters.getInstance("AES");
            algorithmParameters.init(new IvParameterSpec(Base64.decodeBase64(iv)));
            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(Base64.decodeBase64(sessionKey), "AES"), algorithmParameters);
            byte[] decode = PKCS7Decode(cipher.doFinal(Base64.decodeBase64(encryptData)));
            return new String(decode, StandardCharsets.UTF_8);
        }

    得到用户手机号和用户openid/unionId后就可以对应登录或者注册了。

    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制