菜单

微信小程序getPhoneNumber获取用户手提式有线电话机号

2019年6月7日 - XML

 微信小程序getPhoneNumber获取用户手提式有线电话机号

微信小程序怎么着获取用户手提式有线电电话机号,小程序获得手提式有线电话机号

近年来在做一款微信小程序,要求获得用户手机号,具体步骤如下:

流程图:

图片 1

一、首先,客户端调用wx.login,回调数据了包蕴jscode,用于获取openid(用户唯壹标志)和sessionkey(会话密钥)。

二、得到jscode后,将其发送给服务端,服务端拿它与微信服务端做交互获取openid和sessionkey。具体获取格局如下:

(一)须求写2个HttpUrlConnection工具类:

public class MyHttpUrlConnection { 
 private final int mTimeout = 10000; // 超时时间 
 /** 
 * get访问 
 */ 
 public String[] requestJson(String url) { 
 return request(url); 
 } 
 private String[] request(String connurl) { 
 String[] resultStr = new String[]{"", ""}; 
 StringBuilder resultData = new StringBuilder(""); 
 HttpURLConnection conn = null; 
 try { 
  URL url = new URL(connurl); 
  conn = (HttpURLConnection) url.openConnection(); 
  conn.setRequestMethod("GET"); 
  conn.setUseCaches(false); 
  conn.setConnectTimeout(mTimeout); 
  conn.connect(); 
  int resultCode = conn.getResponseCode(); 
  InputStreamReader in; 
  if (resultCode == 200) { 
  in = new InputStreamReader(conn.getInputStream()); 
  BufferedReader buffer = new BufferedReader(in); 
  String inputLine; 
  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; 
 } 
} 

(二)然后经过那一个工具类与微信服务器创建连接,获取想要的数据:

 String url = "https://api.weixin.qq.com/sns/jscode2session?appid=""&secret=""&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和secret都是上下一心开垦者账号里能够查询到的,js_code是客户端发过来的,那样在回来的数据中就足以获取sessionkey。

叁、服务器A得到sessionkey后,生成1个私下数大家叫三rdsession,以3rdSessionId为key,以sessionkey
+
openid为value缓存到redis或memcached中;因为微信团队不提议直接将sessionkey在互联网上传输,由开采者自行生成唯一键与sessionkey关联。其效果是:
(一)、将三rdSessionId重临给客户端,维护小程序登入态。

(2)、通过3rdSessionId找到用户sessionkey和openid。

四、客户端获得三rdSessionId后缓存到storage,
5、通过wx.getUserIinfo可以取获得用户敏感数据encryptedData 。
六、客户端将encryptedData、3rdSessionId和偏移量一同发送到服务器A
七、服务器A依照三rdSessionId从缓存中赢得session_key
捌、在服务器A使用AES解密encryptedData,从而落成用户敏感数据解密。

解密数据要求动用的参数有四个,分别是:

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

在解密的时候要将上述四个变量做Base6肆解码:

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

接下来利用AES解密方法实行解密:

public static byte[] decrypt(byte[] key, byte[] iv, byte[] encData) 
 throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, 
 InvalidKeyException, BadPaddingException, IllegalBlockSizeException { 
 AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv); 
 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
 SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); 
 cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); 
 return cipher.doFinal(encData); 
} 

那样在回来的多少中就足以得到用户的手提式有线电话机号。

如上正是本文的全体内容,希望对大家的上学抱有帮忙,也希望大家多多协理帮客之家。

http://www.bkjia.com/Javascript/1298194.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javascript/1298194.htmlTechArticle微信小程序如何获取用户手机号,小程序获取手机号
近些日子在做壹款微信小程序,需求获得用户手提式有线电话机号,具体步骤如下: 流程图:
一、首先,…

小程序中有广大地点都会用到注册用户音信的地点,用户要求填写手提式有线电话机号等, 有了这一个组件能够快速获得微信绑定手提式有线电话机号码,无须用户填写。

1.getPhoneNumber这一个组件通过button来促成(其余标签无效)。将button中的open-type=“getPhoneNumber”,并且绑定bindgetphonenumber事件获取回调。

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">

二.在动用这些组件从前务必先调用login接口,假使未有调用login点击button时会提示先调用login。

App({ 
  onLaunch: function () { 
    wx.login({ 
      success: function (res) { 
        if (res.code) { 
          //发起网络请求 
          console.log(res.code) 
        } else { 
          console.log('获取用户登录态失败!' + res.errMsg) 
        } 
      } 
    }); 
  } 
}) 

三.因此bindgetphonenumber绑定的风浪来收获回调。回调的参数有八个,

图片 2

getPhoneNumber: function(e) {  
  console.log(e.detail.errMsg)  
  console.log(e.detail.iv)  
  console.log(e.detail.encryptedData)  
  if (e.detail.errMsg == 'getPhoneNumber:fail user deny'){ 
   wx.showModal({ 
     title: '提示', 
     showCancel: false, 
     content: '未授权', 
     success: function (res) { } 
   }) 
  } else { 
   wx.showModal({ 
     title: '提示', 
     showCancel: false, 
     content: '同意授权', 
     success: function (res) { } 
   }) 
  } 
 } 

四.最终我们需求依据本人的业务逻辑来进展管理,假如用户不容许授权的话只怕咱们会有一个让她手动输入的分界面,借使不是强制获取手提式有线电话机号的话能够直接跳转页面实行下一步。(用户差异意授权errMsg重临‘getPhoneNumber:fail
user deny’)

五.用户同意授权,我们能够依照login时获得到的code来通过后台以及微信管理获得session_key,最后经过app_id,session_key,iv,encryptedData(用户同意授权errMsg再次回到‘getPhoneNumber:ok’)

陆.解密的点子能够去微信官方开辟文书档案查看,有很详细表达。

加密数据解密算法(官方文书档案)

如有疑问请留言也许到本站社区调换座谈,感激阅读,希望能补助到我们,谢谢我们对本站的支撑!

您只怕感兴趣的稿子:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图