首頁 >微信小程式 >小程式開發 >如何透過微信小程式取得用戶手機號

如何透過微信小程式取得用戶手機號

不言
不言原創
2018-06-23 11:17:222991瀏覽

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

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

流程圖:


#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); 
}

這樣在傳回的資料中就可以拿到使用者的手機號碼。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

關於微信小程式上傳圖片到伺服器的程式碼

微信小程式傳回多層頁面的實作方法

微信小程式開發之好友列表字母列表跳轉對應位置

以上是如何透過微信小程式取得用戶手機號的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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