最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序如何獲取用戶手機(jī)號(hào)

 更新時(shí)間:2018年01月26日 10:29:02   作者:極樂叔  
這篇文章主要為大家詳細(xì)介紹了微信小程序如何獲取用戶手機(jī)號(hào),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近在做一款微信小程序,需要獲取用戶手機(jī)號(hào),具體步驟如下:

流程圖:


1、首先,客戶端調(diào)用wx.login,回調(diào)數(shù)據(jù)了包含jscode,用于獲取openid(用戶唯一標(biāo)識(shí))和sessionkey(會(huì)話密鑰)。

2、拿到j(luò)scode后,將其發(fā)送給服務(wù)端,服務(wù)端拿它與微信服務(wù)端做交互獲取openid和sessionkey。具體獲取方法如下:

(1)需要寫一個(gè)HttpUrlConnection工具類:

public class MyHttpUrlConnection { 
 private final int mTimeout = 10000; // 超時(shí)時(shí)間 
 /** 
 * 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)然后通過這個(gè)工具類與微信服務(wù)器建立連接,獲取想要的數(shù)據(jù):

 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都是自己開發(fā)者賬號(hào)里可以查詢到的,js_code是客戶端發(fā)過來的,這樣在返回的數(shù)據(jù)中就可以獲取sessionkey。

3、服務(wù)器A拿到sessionkey后,生成一個(gè)隨機(jī)數(shù)我們叫3rdsession,以3rdSessionId為key,以sessionkey + openid為value緩存到redis或memcached中;因?yàn)槲⑿艌F(tuán)隊(duì)不建議直接將sessionkey在網(wǎng)絡(luò)上傳輸,由開發(fā)者自行生成唯一鍵與sessionkey關(guān)聯(lián)。其作用是: (1)、將3rdSessionId返回給客戶端,維護(hù)小程序登錄態(tài)。

(2)、通過3rdSessionId找到用戶sessionkey和openid。

4、客戶端拿到3rdSessionId后緩存到storage,
5、通過wx.getUserIinfo可以獲取到用戶敏感數(shù)據(jù)encryptedData 。
6、客戶端將encryptedData、3rdSessionId和偏移量一起發(fā)送到服務(wù)器A
7、服務(wù)器A根據(jù)3rdSessionId從緩存中獲取session_key
8、在服務(wù)器A使用AES解密encryptedData,從而實(shí)現(xiàn)用戶敏感數(shù)據(jù)解密。

解密數(shù)據(jù)需要用到的參數(shù)有三個(gè),分別是:

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

在解密的時(shí)候要將上述三個(gè)變量做Base64解碼:

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

然后使用AES解密方法進(jìn)行解密:

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

這樣在返回的數(shù)據(jù)中就可以拿到用戶的手機(jī)號(hào)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 調(diào)試Node.JS的輔助工具(NodeWatcher)

    調(diào)試Node.JS的輔助工具(NodeWatcher)

    Node.JS調(diào)試貌似比較麻煩,每次改完了要重啟一下Node進(jìn)程.GOOGLE上有個(gè)NPM模塊,可以監(jiān)控JS文件的更改,然后自動(dòng)重啟Node.但我下載后在windows里運(yùn)行報(bào)錯(cuò)
    2012-01-01
  • SOSO地圖API使用(一)在地圖上畫圓實(shí)現(xiàn)思路與代碼

    SOSO地圖API使用(一)在地圖上畫圓實(shí)現(xiàn)思路與代碼

    最近在做SOSO地圖相關(guān)開發(fā),遇到相關(guān)畫圓知識(shí),特此簡(jiǎn)單記錄下來,接下來講解如何在在地圖上畫圓,感興趣的朋友可以了解下
    2013-01-01
  • 一個(gè)級(jí)聯(lián)菜單(IE ONLY),不過代碼很精簡(jiǎn)!

    一個(gè)級(jí)聯(lián)菜單(IE ONLY),不過代碼很精簡(jiǎn)!

    一個(gè)級(jí)聯(lián)菜單(IE ONLY),不過代碼很精簡(jiǎn)!...
    2006-10-10
  • 提升JavaScript加載速度的10種方式

    提升JavaScript加載速度的10種方式

    在許多現(xiàn)代網(wǎng)站中,有大量的JavaScript,事實(shí)上,JavaScript的下載和解析都需要時(shí)間,這使得網(wǎng)站的加載速度大大降低,有一些簡(jiǎn)單的方法可以減少你在網(wǎng)站上加載的JavaScript數(shù)量,并使你正在加載的JavaScript加載得更快,我們今天將介紹這些方法
    2023-06-06
  • innerText innerHTML的用法以及注意事項(xiàng) [推薦]

    innerText innerHTML的用法以及注意事項(xiàng) [推薦]

    我們常常需要使用另外一些對(duì)象的屬性來實(shí)現(xiàn)動(dòng)態(tài)改變其中的文本,它們就是:innerText,outerText,innerHTML,outerHTML,千萬要注意它們的大小寫,因?yàn)殄e(cuò)一點(diǎn)您就得不到預(yù)期的效果了。
    2009-05-05
  • Javascript 鍵盤事件的組合使用實(shí)現(xiàn)代碼

    Javascript 鍵盤事件的組合使用實(shí)現(xiàn)代碼

    Javascript 鍵盤事件的組合使用實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2012-05-05
  • JS實(shí)現(xiàn)簡(jiǎn)單獲取最近7天和最近3天日期的方法

    JS實(shí)現(xiàn)簡(jiǎn)單獲取最近7天和最近3天日期的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)簡(jiǎn)單獲取最近7天和最近3天日期的方法,涉及javascript針對(duì)日期與時(shí)間的相關(guān)數(shù)值運(yùn)算與轉(zhuǎn)換操作技巧,需要的朋友可以參考下
    2018-04-04
  • 淺談原生JS中的延遲腳本和異步腳本

    淺談原生JS中的延遲腳本和異步腳本

    下面小編就為大家?guī)硪黄獪\談原生JS中的延遲腳本和異步腳本。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • JavaScript單例模式實(shí)現(xiàn)自定義彈框

    JavaScript單例模式實(shí)現(xiàn)自定義彈框

    這篇文章主要為大家詳細(xì)介紹了JavaScript單例模式實(shí)現(xiàn)自定義彈框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 微信小程序select下拉框?qū)崿F(xiàn)效果

    微信小程序select下拉框?qū)崿F(xiàn)效果

    這篇文章主要介紹了微信小程序select下拉框?qū)崿F(xiàn)效果,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評(píng)論

泸西县| 西安市| 安泽县| 罗江县| 汝城县| 蕲春县| 远安县| 海淀区| 河池市| 扬中市| 勐海县| 遂溪县| 博湖县| 辽源市| 玉龙| 张掖市| 广州市| 横山县| 五指山市| 五家渠市| 新丰县| 瑞安市| 衡山县| 敦煌市| 平阳县| 丁青县| 青川县| 革吉县| 绥宁县| 镶黄旗| 常山县| 金溪县| 西平县| 巴塘县| 南安市| 桓台县| 磐安县| 永康市| 潮州市| 昭苏县| 年辖:市辖区|