在開發(fā)微信小程序過程中,遇到一個登錄的問題。就是微信小程序登錄操作的時候,第一次總是會失敗,返回pad block corrupted
,然后再次登錄的時候就會登錄成功。出現(xiàn)這樣的錯誤,百度原因大多數(shù)是說session_key
過期,到期去解密手機號數(shù)據(jù)的時候,解密出錯。具體分析:
1、登錄代碼邏輯:
image.png
- 第一步是點擊微信登錄按鈕獲取微信手機號
- 第二步是獲取手機號加密數(shù)據(jù)成功后,請求微信的登錄接口
wx.login()
獲取code
- 第三步是將
code
傳到后臺服務(wù)器去請求seesion_key
和openId
- 第四步是后臺通過
session_key
和openId
解密手機號加密字符串,并進行自我登錄系統(tǒng)的登錄操作;
產(chǎn)生問題的原因:
這里描述的問題是出現(xiàn)在第四步的步驟中,原因是第三步獲取的session_key
不正確,導(dǎo)致解密操作錯誤,返回pad block corrupted
。但是導(dǎo)致session_key
不正確的原因是第二步調(diào)用wx.login()
方法,會刷新session_key
。因為第一步獲取的手機號加密數(shù)據(jù)是通過原來的session_key
加密的,現(xiàn)在session_key
刷新了,導(dǎo)致后臺在第三步去獲取seesion_key
的時候,獲取的是新的seesion_key
,然后去解密的時候就報錯了。
解決思路:
- 1.在調(diào)用獲取手機號方法之前,調(diào)用
login()
方法,這樣就能保證seesion_key
是一致的。 - 2.通過
wx.checkSession
方法判斷當前seesion_key
是否過期,如果過期了,就調(diào)wx.login
方法。沒有過期則直接跳過第二步、第三步,走第四步。