柚子快報邀請碼778899分享:微信小程序手機號授權(quán)登錄
柚子快報邀請碼778899分享:微信小程序手機號授權(quán)登錄
?微信小程序--登錄授權(quán),一鍵獲取用戶微信手機號并登錄
獲取手機號
我們這個后臺代碼已經(jīng)提前啟動了啊,這個后端代碼是java開發(fā)的,使用的是springboot框架開發(fā)的,數(shù)據(jù)庫使用的是mybatis-plus,這個代碼是如何通過小程序端獲取手機號碼的呢,就是誰使用這個小程序就獲取誰的代碼,根據(jù)不同的人獲取不同的代碼,現(xiàn)在我們演示一下就是我們?nèi)绾潍@取這個手機號碼啊,就是手機號,通過點擊這個按鈕來獲取
??
必須寫成這樣子,這個getPhoneNumber就是獲取手機號的意思當然了這個getphonenumber改成其他的名字也可以,為了統(tǒng)一就都寫出了這個getphonenumber,然后就會執(zhí)行這個代碼
getPhoneNumber(e)?{
????console.log(e.detail.errMsg)
????console.log(e.detail.iv)
????console.log(e.detail.encryptedData)
????console.log(app.globalData.session_key)
????//session_key?這個是全局變里的參數(shù),我app。js獲取后保存在全局變量的
????get_phone(e.detail.encryptedData,app.globalData.session_key,e.detail.iv).then(res?=>?{
??????console.log(res)
??????console.log(res.data.phoneNumber);
??????this.setData({
????????phone:?res.data.phoneNumber
??????})
????})
獲取這個手機號碼需要三個參數(shù),
這個ssesion_key在微信登錄的時候,會有一個sesssion_key保存在我們的全局變量里面,然后我們使用的時候就會拿出這個sesssion_key,這個接口會接受微信小程序的一個code,然后拿到code我們會通過一系列的東西先拿到一個session_key,拿到這個session_key之后呢,
getPhoneNumber(e)?函數(shù)會在用戶授權(quán)并成功獲取手機號碼后被調(diào)用,參數(shù)?e?是微信小程序傳遞過來的事件對象,其中包含了加密后的手機號信息。 首先通過?console.log?輸出一些關(guān)鍵信息:
e.detail.errMsg:輸出獲取手機號的結(jié)果信息,用于判斷是否成功獲取。e.detail.iv:加密算法的初始向量,用于配合session_key解密手機號數(shù)據(jù)。e.detail.encryptedData:加密后的用戶手機號數(shù)據(jù)。 console.log(app.globalData.session_key):輸出全局變量?app.globalData.session_key?的值,這是微信登錄時返回的 session_key,用于后續(xù)解密操作。 調(diào)用異步方法?get_phone(e.detail.encryptedData, app.globalData.session_key, e.detail.iv),該方法接收三個參數(shù),分別是加密后的手機號數(shù)據(jù)、session_key 和 iv,用于發(fā)起解密請求,獲取真實的手機號碼。 在?get_phone?方法的 Promise 結(jié)果(即?then?方法中):
console.log(res):輸出整個解密后的響應(yīng)結(jié)果。console.log(res.data.phoneNumber):輸出解密后的手機號碼。使用?this.setData({ phone: res.data.phoneNumber })?將解密后的手機號碼設(shè)置到當前頁面的data中,以便在頁面上展示或進一步使用。
? 這段代碼的主要目的是在用戶授權(quán)同意后,獲取并解密用戶的微信綁定手機號碼,并將其保存在頁面的?phone?屬性中。
然后這邊的話是拿到了一個session_key呢又拿到了一個openid,通過這個鏈接呢可以拿到我們的session_key和openid,
也就是說我們把這個session_key和openid啊都返回這個小程序端,然后這個小程序端就會做一個保存,也就是會保存到我們這個全局變量里面,
這個全局變量呢就在在這個app.js文件里面,就是這個微信小程序啟動的時候呢,它會做微信登陸的一個動作啊
這就是我們微信登錄的一個動作啊,這是封裝的一個小程序登錄,不是小程序自帶的啊,
然后我們微信登錄在這個代碼里面啊,然后這個代碼是自己封裝的啊,
實際上就是調(diào)用wx.login,wx.login就會有這個code,這個code 呢就是傳回springboot api的那個code,
這邊呢就算是說拿到我們的session_key和open_id全都保存到全局變量里面,
也就是我們獲取手機號的話我們需要這三個參數(shù)
然后調(diào)用這個封裝的getphone方法,獲取手機號解密
調(diào)用這個api呢實際上就是調(diào)用后端的這個api,
把他三個參數(shù)全部傳遞過來,然后呢進行解密,解密后的數(shù)據(jù)通過我們的這個工具類,就是通過這些參數(shù)解析出來我們的數(shù)據(jù)也就是我們的電話號碼,
這是Java后端的一個RESTful API接口,用于接收前端傳來的加密數(shù)據(jù)并解密出微信用戶的手機號碼。具體說明如下:
該方法名為?getPhoneNumber_jiemi,接收三個GET請求參數(shù):
encryptedData:這是經(jīng)過微信加密算法加密過的用戶手機號碼數(shù)據(jù)。iv:加密算法的初始向量(Initialization Vector),用于解密過程。session_key:微信登錄接口返回的會話密鑰,也是解密所需的重要參數(shù)。 方法首先打印出傳入的?session_key、encryptedData?和?iv?參數(shù),用于調(diào)試和日志記錄。 然后嘗試使用?AESUtils.decrypt?方法對加密數(shù)據(jù)進行解密,該方法可能來自自定義的工具類?AESUtils,通過傳入的?encryptedData、session_key、iv?以及字符編碼 "UTF-8" 進行解密操作。 解密成功后,將解密得到的字符串轉(zhuǎn)換成一個?JSONObject?對象(使用阿里巴巴 Fastjson 庫),并返回這個包含手機號碼信息的JSON對象。 如果在解密過程中發(fā)生異常,會捕獲異常并打印堆棧信息,最后返回?null。
總之,這段代碼的目的就是對接收到的微信加密手機號數(shù)據(jù)進行解密處理,并以JSON格式返回解密后的手機號信息。
這個返回的數(shù)據(jù)啊就是我們的電話號碼啊
然后把我們的真實號碼賦給我們的phone就可以了
這個就是我們獲取手機號的一個方法,這個呢就是一個解密的工具類,把這個無序的字符串啊解密成我們的電話號碼,
然后這個也是解析數(shù)據(jù)的一個工具類
這個數(shù)據(jù)就是加密的一個數(shù)據(jù),這個導航和小程序輪播都是可以去修改的
柚子快報邀請碼778899分享:微信小程序手機號授權(quán)登錄
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。