如何开发微信小程序的获取用户手机号功能

  介绍

这篇文章给大家分享的是有关如何开发微信小程序的获取用户手机号功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

最近在做一款微信小程序,需要获取用户手机号,具体步骤如下:

流程图:

如何开发微信小程序的获取用户手机号功能

1,首先,客户端调用wx。登录,回调数据了包含jscode,用于获取openid(用户唯一标识)和sessionkey(会话密钥)。

2,拿到jscode后,将其发送给服务端,服务端拿它与微信服务端做交互获取openid和sessionkey。具体获取方法如下:

(1)需要写一个HttpUrlConnection工具类:

public  class  MyHttpUrlConnection  {,   ,private  final  int  mTimeout =, 10000,,//,超时时间,/* *大敌;   ,*得到访问,   ,*/,public  String [], requestJson (String  url), {,   ,return 请求(url),   }大敌;   ,private  String[],请求(String  connurl), {,   ,String [] resultStr =, new  String [] {“,,,,,},,   ,StringBuilder  resultData =, new  StringBuilder (“;”),,   ,HttpURLConnection  conn =,零,,   try {大敌;   URL 才能;URL =, new  URL (connurl);,   conn 才能=,(HttpURLConnection), url.openConnection (),,   conn.setRequestMethod才能(“GET");,   conn.setUseCaches才能(假的),,   conn.setConnectTimeout才能(mTimeout);,   conn.connect才能(),,   int 才能;resultCode =, conn.getResponseCode (),,   ,,InputStreamReader ;   if 才能;(resultCode ==, 200), {,=,拷贝才能new  InputStreamReader (conn.getInputStream ()),,   BufferedReader 才能;buffer =, new  BufferedReader (),,   inputLine; String 才能;   while 才能;((inputLine =, buffer.readLine ()), !=, null), {,   ,,resultData.append (inputLine);,   ,,resultData.append (“\ n");,   ,,},   buffer.close才能(),,   in.close才能(),,   ,,},   resultStr才能[0],=,resultData.toString (),,   resultStr才能[1],=,resultCode  +,““,   ,}catch  (Exception  e), {,   e.printStackTrace才能(),,   {}大敌;finally    if 才能;(conn  !=, null), {,   conn.disconnect才能(),,   ,,},   }大敌;   ,return  resultStr;   }大敌;   }

(2)然后通过这个工具类与微信服务器建立连接,获取想要的数据:

,String  url =,“https://api.weixin.qq.com/sns/jscode2session?appid="“,秘密=啊?js_code=?   ,,+,jsCode  +,“和grant_type=authorization_code",,   ,String  res [],=, connection.requestJson (url),,   ,System.out.println (res [0]),,   ,JSONObject  object =, JSON.parseObject (res [0]),,   ,String  openId =, object.getString (“openid");,   ,String  session_key =, object.getString (“session_key");

其中appid和秘密都是自己开发者账号里可以查询到的,js_code是客户端发过来的,这样在返回的数据中就可以获取sessionkey。

3,服务器一个拿到sessionkey后,生成一个随机数我们叫3 rdsession,以3 rdsessionid为关键,以sessionkey + openid为价值缓存到复述或memcached中,因为微信团队不建议直接将sessionkey在网络上传输,由开发者自行生成唯一键与sessionkey关联。其作用是:(1),将3 rdsessionid返回给客户端,维护小程序登录态。

(2),通过3 rdsessionid找到用户sessionkey和openid。

4,客户端拿到3 rdsessionid后缓存到存储,
5,通过wx。getUserIinfo可以获取到用户敏感数据encryptedData。
6,客户端将encryptedData, 3 rdsessionid和偏移量一起发送到服务器
7,服务器一根据3 rdsessionid从缓存中获取session_key
8日在服务器一个使用AES解密encryptedData,从而实现用户敏感数据解密。

解密数据需要用到的参数有三个,分别是:

1, encryptedData(密文)
2, iv(向量)
3, aesKey(密钥)也就是sessionkey

在解密的时候要将上述三个变量做Base64解码:

byte [], encrypData =, UtilEngine.decode (encData);,   时间=byte [], ivData  UtilEngine.decode (iv),,   byte [], sessionKey =, UtilEngine.decode (session_key);

然后使用AES解密方法进行解密:

public  static  byte[],解密(byte[],钥匙,,byte[],四世,byte [], encData),   ,throws  NoSuchPaddingException, NoSuchAlgorithmException,, InvalidAlgorithmParameterException,,   ,InvalidKeyException, BadPaddingException, IllegalBlockSizeException  {,   ,AlgorithmParameterSpec  ivSpec =, new  IvParameterSpec (iv),,   ,Cipher  Cipher =, . getinstance (“AES/CBC/PKCS5Padding"),,   ,SecretKeySpec  keySpec =, new  SecretKeySpec(键,“AES"),,   ,cipher.init (Cipher.DECRYPT_MODE, keySpec,, ivSpec),,   ,return  cipher.doFinal (encData);,   null

如何开发微信小程序的获取用户手机号功能