首頁  >  文章  >  web前端  >  在微信小程式中如何才可以取得使用者手機號碼訊息

在微信小程式中如何才可以取得使用者手機號碼訊息

亚连
亚连原創
2018-06-09 13:49:032763瀏覽

這篇文章主要為大家詳細介紹了微信小程序如何獲取用戶手機號,具有一定的參考價值,有興趣的小伙伴們可以參考一下

#最近在做一款微信小程序,需要取得使用者手機號,具體步驟如下:

流程圖:

#1、首先,客戶端呼叫wx.login,回呼資料了包含jscode,用於取得openid(使用者唯一識別)和sessionkey(會話密鑰)。

2、拿到jscode後,將其傳送給服務端,服務端拿它與微信服務端做互動取得openid和sessionkey。具體取得方法如下:

(1)需要寫一個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; 
 } 
}

(2)然後透過這個工具類別與微信伺服器建立連接,取得想要的資料:

 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。

3、伺服器A拿到sessionkey後,產生一個隨機數我們叫3rdsession,以3rdSessionId為key,以sessionkey openid為value緩存到redis或memcached中;因為微信團隊不建議直接將sessionkey在網絡上傳輸,由開發者自行產生唯一鍵與sessionkey關聯。其功能是: (1)、將3rdSessionId回傳至客戶端,維護小程式登入態。

(2)、透過3rdSessionId找到使用者sessionkey和openid。

4、客戶端拿到3rdSessionId後快取到storage,
5、透過wx.getUserIinfo可以取得到使用者敏感資料encryptedData 。
6、客戶端將encryptedData、3rdSessionId和偏移量一起傳送到伺服器A
7、伺服器A根據3rdSessionId從快取中取得session_key
8、在伺服器A使用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[] 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); 
}

這樣在回傳的數據中就可以拿到用戶的手機號碼。

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

express建置查詢伺服器

#使用js自訂trim函數刪除兩端空格

JavaScript運作原理

#

以上是在微信小程式中如何才可以取得使用者手機號碼訊息的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn