本文主要详细介绍了微信小程序是如何获取用户手机号的,有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。
最近在做微信小程序,需要获取用户的手机号。具体步骤如下:
流程图:
1.首先,客户端调用wx.login,回调数据包含jscode,用于获取openid(唯一用户标识)和sessionkey(会话密钥)。
2.获取jscode后发送给服务器,服务器与微信服务器交互获取openid和sessionkey。具体采集方法如下:
(1)你需要编写一个HttpUrlConnection工具类:
公共类MyHttpUrlConnection { private final int mTimeout = 10000;//time out/* * * get access */public string[]request JSON(字符串URL){ return request(URL);} private String[]request(String conn URL){ String[]resultStr = new String[]{ & quot;",& quot"};StringBuilder result data = new StringBuilder(& quot;");HttpURLConnection conn = null试试{ URL URL = new URL(conn URL);conn =(http urlconnection)URL . open connection();conn . setrequestmethod(& quot;获取& quot);conn . setusecaches(false);conn . setconnecttimeout(mTimeout);conn . connect();int result code = conn . getresponsecode();中的InputStreamReaderif(result code = = 200){ in = new InputStreamReader(conn . getinputstream());buffered reader buffer = new buffered reader(in);字符串inputLinewhile((input line = buffer . readline())!= null){ resultdata . append(input line);resultdata . append(& quot;\ \ n & quot);} buffer.close()。in . close();} resultStr[0]= result data . tostring();resultStr[1]= result code+& quot;";} catch(Exception e){ e . printstacktrace();}最后{ if (conn!= null){ conn . disconnect();} }返回resultStr}}} (2)然后通过这个工具类与微信服务器建立连接,获取想要的数据:
字符串url = & quothttps://api.weixin.qq.com/sns/jscode2session? appid = & quot;"& ampsecret = & quot"& ampjs _ code = & quot+jsCode+& quot;& ampgrant _ type = authorization _ code & quot;string RES[]= connection . request JSON(URL);system . out . println(RES[0]);JSON object object = JSON . parse object(RES[0]);string openId = object . getstring(& quotopenid & quot);string session _ key = object . getstring(& quot会话密钥& quot);可以在开发者的账号中找到appid和secret,客户端发送js_code,这样就可以从返回的数据中获得sessionkey。
3.服务器A得到sessionkey后,生成一个随机数,名为3rdsession,缓存在redis或memcached中,以3rdSessionId为key,sessionkey+openid为value因为微信团队不建议在网络上直接传输sessionkey,所以开发人员自己生成唯一的密钥与sessionkey关联。其作用是:(1)向客户端返回3rdSessionId,维护小程序的登录状态。
(2)通过3rdSessionId找到用户sessionkey和openid。
4.客户端获得3rdSessionId后,会缓存在存储中。5.用户敏感数据encryptedData可通过wx.getUserIinfo 6获得。客户端将encryptedData、3rdSessionId和offset发送给服务器A7,服务器A根据3rdSessionId从缓存中获取session_key8,并在服务器A中用AES对加密数据进行解密,从而实现对用户敏感数据的解密。
解密数据需要三个参数,即:
1、encryptedData(密文)2、iv (vector) 3、aesKey (key)是sessionkey。
解密时,上述三个变量应该是Base64解码的:
byte[]encrypData = utilengine . decode(encData);byte[]iv data = utilengine . decode(iv);byte[]session key = utilengine . decode(session _ key);然后使用AES解密方法解密:
public static byte[]decrypt(byte[]key,byte[] iv,byte[] encData)抛出NoSuchPaddingException,NoSuchAlgorithmException,invalidalgorithmhparameterexception,InvalidKeyException,BadPaddingException,IllegalBlockSizeException { algorithm parameterspec iv spec = new IvParameterSpec(iv);cipher cipher = cipher . getinstance(& quot;AES/CBC/pkcs 5添加& quot);SecretKeySpec key spec = new SecretKeySpec(key,& quotAES & quot);cipher.init(密码。DECRYPT_MODE,keySpec,iv spec);返回cipher . do final(encData);}以便在返回的数据中获取用户的手机号码。
相关建议:
说明微信小程序的登录功能,获取手机号,授权用户。
PHP获取手机号码的正则表达式书写
通过API _PHP教程获取手机号码归属地
评论前必须登录!
注册