微信小程序获取手机号

Posted 一个抓手

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序获取手机号相关的知识,希望对你有一定的参考价值。

1.先调用wx.login接口,获取code。

2.通过button组件的点击来触发,获取encryptedData、iv。

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
Page({
  getPhoneNumber (e) {
    console.log(e.detail.errMsg)
    console.log(e.detail.iv)
    console.log(e.detail.encryptedData)
  }
})

3.然后通过code获取到session_key,与encryptedData、iv一起解密,获取到明文手机号数据。

    /**
     * 解密数据
     *
     * @param encryptedData
     * @param iv
     * @param sessionKey
     * @return
     */
    public static JSONObject decryptData(String encryptedData, String iv, String sessionKey) {
        // 被加密的数据
        byte[] dataByte = Base64.decode(encryptedData);
        // 偏移量
        byte[] ivByte = Base64.decode(iv);
        // 加密秘钥
        byte[] keyByte = Base64.decode(sessionKey);
        try {
            int base = 16;
            if (keyByte.length % base != 0) {
                int groups = keyByte.length / base + 1;
                byte[] temp = new byte[groups * base];
                Arrays.fill(temp, (byte) 0);
                System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
                keyByte = temp;
            }
            Security.addProvider(new BouncyCastleProvider());
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
            SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
            AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
            parameters.init(new IvParameterSpec(ivByte));
            cipher.init(Cipher.DECRYPT_MODE, spec, parameters);
            byte[] resultByte = cipher.doFinal(dataByte);
            if (null != resultByte && resultByte.length > 0) {
                String result = new String(resultByte, StandardCharsets.UTF_8);
                log.info("微信用户信息解密数据:" + result);
                return JSONObject.parseObject(result);
            }
            throw new BusinessException("无效的加密数据");
        } catch (Exception e) {
            log.error("微信用户信息解密失败", e);
            throw new BusinessException("微信用户信息解密失败");
        }
    }

获取到的明文json格式如下:

{
    "phoneNumber": "13012345678",
    "purePhoneNumber": "13012345678",
    "countryCode": "86",
    "watermark":
    {
        "appid":"xxx",
        "timestamp": TIMESTAMP
    }
}

 

以上是关于微信小程序获取手机号的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序获取用户ip

微信小程序获取手机号

微信小程序获取用户openId、手机号

微信小程序如何获取用户ip?

uniapp:微信小程序获取用户手机号

微信小程序代码片段分享