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

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

看到結果之后我就跟我的請求服務器的參數挨個對照,當看到encryptData時,發(fā)現了問題,文檔上寫的是應該把encryptedData的值用于解密,而我則是把encryptData的值
取出來了,所以解密結果就不正確了。
至此,發(fā)現問題,把參數改成encryptedData之后解密成功。
總結一下問題: 由于wx.getUserInfo()返回值中encryptData和encryptedData參數名稱過于相似,導致我用錯變量,實在是不應該。
至于為什么微信要多返回一個沒用的參數(目前還沒發(fā)現它的作用),我就不知到了,而且文檔上根本就沒提到這個。

希望大家編碼的時候能夠細心一點,不要犯我這樣的錯誤。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答