本文详细阐述了微信小程序如何获取用户手机号码的操作步骤,具有较高的参考意义。对此感兴趣的朋友们不妨一阅,相信大家在阅读完本文后会有所收获。接下来,就让我们跟随小编一同深入了解吧。
微信小程序需要获取用户手机号的具体步骤如下:
流程图:
起初,客户端执行了wx.操作,随后返回的数据中包含了必要的元素,这些元素分别用于获取用户的唯一标识以及会话密钥。
接收到信息后,将其传递至服务器端,服务器端随即与微信服务器进行对接,以实现信息的获取。具体的获取方式包括:
(1)需要写一个工具类:
并能够接收和解析响应数据。 这是一个私有常量,其值为10000,代表超时时间的设定。 /** * get访问 */ return request(url); } 私有字符串数组request函数,接收一个连接URL参数。 初始化了一个字符串数组resultStr,包含两个空字符串元素。 初始化一个空的StringBuilder对象用于存储结果数据。 初始化HttpURLConnection对象conn为null。 try { 创建一个URL对象,名为url,通过传递connurl作为参数来初始化。 conn等于通过调用url对象的openConnection方法得到的HttpURLConnection对象。 conn.setMethod("GET");同时,对请求方式进行指定。 conn.setUseCaches(false); conn.设置连接超时时间为mTimeout; conn.connect(); conn获取到的响应代码被赋值给了变量resultCode。 InputStreamReader in; if (resultCode == 200) {
随后,借助该工具类与微信服务器搭建起联系,进而获取所需信息。
定义字符串url,其值为"https://api.weixin.qq.com/sns/jscode2session",其中包含查询参数appid、secret和js_code。 jsCode添加了"&grant_type=authorization_code"参数。 connection通过发送请求,从url地址获取到了JSON格式的数据,并将这些数据存储到了名为res的字符串数组中。 System.out.println(res[0]); JSONObject object等于JSON解析res数组中的第一个元素。 获取对象中的"openid"字段值,并将其赋值给变量stringOpenId。
这些信息,包括客户端发送的,均可在开发者个人账号内查询,并能在返回的数据中得以获取。
服务器A接收到信息后,将创建一个随机数,我们将其命名为key,并通过加号将其缓存至或中;鉴于微信团队不推荐直接在网络上传输该信息,开发者需自行生成一个唯一的键值与相关联。其功能包括:(1)将信息发送回客户端,以保持小程序的登录状态。
(2)、通过找到用户和。
4、客户端拿到后缓存到,
5、通过wx.可以获取到用户敏感数据 。
6、客户端将、和偏移量一起发送到服务器A
7、服务器A根据从缓存中获取
8、在服务器A使用AES解密,从而实现用户敏感数据解密。
解密数据需要用到的参数有三个,分别是:
1、(密文)
2、iv(向量)
3、(密钥)也就是
在解密的时候要将上述三个变量做解码:
通过UtilEngine的解码功能,将encData转换成byte[]类型的加密数据,存储在变量encrypData中。 ivData变量被赋值为UtilEngine解码后的iv数据。 sessionKey变量通过UtilEngine的decode方法对session_key进行解码处理。
然后使用AES解密方法进行解密:
公开静态方法decrypt接受三个参数:密钥数组、初始化向量数组和加密数据数组。 抛出NoSuchPaddingException异常、NoSuchAlgorithmException异常、InvalidAlgorithmParameterException异常、 无效密钥异常、错误填充异常、非法块大小异常,具体表现为: AlgorithmParameterSpec类型的ivSpec对象是通过调用new关键字,并传入IvParameterSpec类型的iv参数来创建的。 Cipher对象cipher通过调用getInstance方法,获取了名为"AES/CBC/PKCS5Padding"的加密实例。 创建了一个名为keySpec的SecretKeySpec对象,该对象通过将key作为输入,并指定加密算法为AES来初始化。 cipher对象在解密模式下被初始化,同时指定了密钥规范和初始化向量规范。 执行cipher对象的doFinal方法,对加密数据encData进行处理并返回结果。 }
这样在返回的数据中就可以拿到用户的手机号。