問題:
做小程序微信授權登錄,先獲取code,然后去獲取到session_key和open_id,再拿到encryptedData,傳到服務器去解密拿到用戶信息,但是有時成功,有時返回-41001錯誤, 觀察日志,都有獲取到session_key,這是什么原因造成的,應該怎么去解決呢?
解決方法:
剛開始考慮的方向一直是session_key過期之類的,因為不知道session_key的過期,后經多次試驗知道不是此原因導致
然后開始翻閱各種相關博客及搜索相關問題,終沒有找到解決方案,可能是出現的這個問題太不應該了,所以這方面的問題並不多
最后開始翻看解密的SDK源碼,然后發現-41001是的原因 是驗證了session_key的長度
if (strlen($this->sessionKey) != 24) {
return ErrorCode::$IllegalAesKey;
}
//public static $IllegalAesKey = -41001;
//>-41001: encodingAesKey 非法
最后又細細去看日志(之前也有詳細對比session_key,只是看有值,一大串字符,也不懂其中的深意,就知道有的成功,有的失敗,根本找不到規律),留意session_key長度,才看出來其中的貓膩
PHP的json字符串有時候加上反斜杠”\”來轉義,PHP處理時需要先去掉反斜杠,然后再json_decode
$str = stripslashes($json);
$arr = json_decode($str,true);
使用stripslashes()函數,問題解決!