微信小程序 wx.login解密出現(xiàn)亂碼的問(wèn)題解決辦法
微信小程序 wx.login解密出現(xiàn)亂碼的問(wèn)題解決辦法
最近在給公司開(kāi)發(fā)微信小程序,需要用到微信登錄,根據(jù)文檔要求需要把獲取的用戶信息按照AES進(jìn)行解密。
我使用的是官方提供的PHP demo,拷貝到程序中,測(cè)試發(fā)現(xiàn),解密之后的數(shù)據(jù)前面有一串亂碼。

類似于這樣子的,前面一段是亂碼。
經(jīng)過(guò)仔細(xì)的檢查,發(fā)現(xiàn)官方的提供的demo中的帳號(hào)和機(jī)密之后的信息是可以解密的,這就說(shuō)明解密代碼是沒(méi)有問(wèn)題的。
后來(lái)查詢微信開(kāi)發(fā)者社區(qū),找到好多解密失敗。其中一個(gè)回答說(shuō)是因?yàn)槎啻握{(diào)用wx.login之后導(dǎo)致的問(wèn)題。
終于看到解決方案,于是趕緊去看我的代碼。可是查找半天發(fā)現(xiàn)只調(diào)用了一次,根本不是這個(gè)問(wèn)題。
有一次走到了死胡同,沒(méi)辦法了,還是看代碼吧。
根據(jù)文檔,應(yīng)該是先調(diào)用wx.login(),成功之后再調(diào)用wx.getUserInfo(), 于是我就想,會(huì)不會(huì)是我把wx.getUserInfo()獲取到的值沒(méi)有正確的傳給服務(wù)器呢?
既然不確定,那就得看看。于是,打印wx.getUserInfo()的返回值,是這樣子的

看到結(jié)果之后我就跟我的請(qǐng)求服務(wù)器的參數(shù)挨個(gè)對(duì)照,當(dāng)看到encryptData時(shí),發(fā)現(xiàn)了問(wèn)題,文檔上寫(xiě)的是應(yīng)該把encryptedData的值用于解密,而我則是把encryptData的值
取出來(lái)了,所以解密結(jié)果就不正確了。
至此,發(fā)現(xiàn)問(wèn)題,把參數(shù)改成encryptedData之后解密成功。
總結(jié)一下問(wèn)題: 由于wx.getUserInfo()返回值中encryptData和encryptedData參數(shù)名稱過(guò)于相似,導(dǎo)致我用錯(cuò)變量,實(shí)在是不應(yīng)該。
至于為什么微信要多返回一個(gè)沒(méi)用的參數(shù)(目前還沒(méi)發(fā)現(xiàn)它的作用),我就不知到了,而且文檔上根本就沒(méi)提到這個(gè)。

希望大家編碼的時(shí)候能夠細(xì)心一點(diǎn),不要犯我這樣的錯(cuò)誤。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
JS實(shí)現(xiàn)發(fā)送短信驗(yàn)證后按鈕倒計(jì)時(shí)功能(防止刷新倒計(jì)時(shí)失效)
這篇文章主要介紹了JS實(shí)現(xiàn)發(fā)送短信驗(yàn)證后按鈕倒計(jì)時(shí)功能防止刷新倒計(jì)時(shí)失效問(wèn)題,在項(xiàng)目開(kāi)發(fā)中經(jīng)常會(huì)用到此功能,下面小編通過(guò)本文給大家分享JS實(shí)現(xiàn)發(fā)送短信驗(yàn)證后按鈕倒計(jì)時(shí)功能(防止刷新倒計(jì)時(shí)失效),需要的朋友參考下吧2017-07-07
JavaScript原型繼承之基礎(chǔ)機(jī)制分析
由于語(yǔ)言設(shè)計(jì)上的原因,JavaScript 沒(méi)有真正意義上“類”的概念。而通常使用的 new 命令實(shí)例化對(duì)象的方法,其實(shí)是對(duì)原型對(duì)象的實(shí)例化。2011-08-08
JavaScript使用localStorage判斷設(shè)置值是否過(guò)期
本文主要介紹了JavaScript使用localStorage判斷設(shè)置值是否過(guò)期,通過(guò)設(shè)置過(guò)期時(shí)間,我們可以使用 setItemWithExpiration 函數(shù)將數(shù)據(jù)存儲(chǔ)到 localStorage 中,并使用 getItemWithExpiration 函數(shù)獲取數(shù)據(jù)并檢查是否過(guò)期,感興趣的可以了解一下2023-05-05
JavaScript使用DeviceOne開(kāi)發(fā)實(shí)戰(zhàn)(三)仿微信應(yīng)用
這篇文章主要介紹了JavaScript使用DeviceOne開(kāi)發(fā)實(shí)戰(zhàn)(三)仿微信應(yīng)用的相關(guān)資料,需要的朋友可以參考下2015-12-12
confirm的用法示例用于按鈕操作時(shí)確定是否執(zhí)行
這篇文章主要介紹了confirm的用法,confirm一般用于按鈕操作時(shí)確定是否執(zhí)行,需要的朋友可以參考下2014-06-06
JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉樹(shù)的刪除算法示例
這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉樹(shù)的刪除算法,簡(jiǎn)單分析了javascript刪除數(shù)據(jù)結(jié)構(gòu)中二叉樹(shù)節(jié)點(diǎn)時(shí)所遇到的各種情況與相關(guān)的處理原理與算法實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-04-04
Javascrip實(shí)現(xiàn)文字跳動(dòng)特效
這篇文章主要介紹了Javascrip實(shí)現(xiàn)文字跳動(dòng)特效的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11

