怎麼開發微信小程式的取得用戶手機號碼功能

php中世界最好的语言
發布: 2018-03-23 10:42:05
原創
2621 人瀏覽過

這次帶給大家怎麼開發微信小程式的獲取用戶手機號碼功能,開發微信小程式的獲取用戶手機號功能的注意事項有哪些,下面就是實戰案例,一起來看一下。

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

流程圖:

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中文網其它相關文章!

推薦閱讀:

jQuery程式碼最佳化方式的摘要

#360瀏覽器相容模式的頁面顯示不全怎麼處理

#

以上是怎麼開發微信小程式的取得用戶手機號碼功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!