我也遇到类似的问题。我这里把日志贴一下吧,也方便微信的技术找一下问题的原因。 请看下面的服务端日志:(我是做了序列化处理的,所以会有类似a:9:等字符;openid由于是敏感信息,被我删掉了;encryptedData也是敏感信息,也被我删掉了能正确解密的那两条,留着无法正确解密的两条做证据。) 首先,从日志记录时间可以看出,这4条登录请求之间相隔没多久。 其次,可以看出第2、3、4这三条日志微信端返回的signature是一模一样的。 再次,可以看出这4条日志接收到的code都是不一样的并且都能正常获取到session_key,从而证明了前端传过来的code是完全没问题的。 最后,可以看到第2、3这两条日志的session_key是一样的,而第4条日志的session_key变了。 结论:第2第3条日志的session_key一致,signature一致,并且能正确利用rawData、session_key来计算出微信返回的signature;而到了第4条日志,虽然session_key还是没有变化,signature却变化了,导致计算出来的signature和微信返回的signature不一致,必然导致数据验证失败。而最要命的是:数据验证失败的时候,用户的加密信息就必定发生解密失败的情况。最后直接导致了无法进行下一步开发。 [2018-12-12 10:15:31]用户信息不合法,请重新登录。errcode:-41003,接收到的参数:a:9:{s:4:"sign";s:0:"";s:1:"t";s:10:"1544580930";s:1:"v";s:2:"10";s:4:"code";s:32:"023Glq742TueQO0eIw742T6a742Glq76";s:4:"type";s:1:"1";s:13:"encryptedData";s:536:"kF3q0YCzix8HIppD8FMKnu+GC+rORcumaMWYDj94ukheiU6M2IAh2W2r9xxOnSH4ipHrEQhTwwrEvgMaal63ZR33uFXtR8FnjGBKCbfVALvNsCGOa7p36U0ljtnJbik/DQWi9YoTg3RtoC9EUacUBJhQJRjCUS+Iq+4O9E9SBrJRSPrdhNZQd3kvs75HHNAnzP6UL2SA2OEGXkiwRUwX0upcwA41YrocCaSwYOs7GyDZC8GO3JFpOtP1dg+CsL8yEmMy0O3vV/06IYgKsfo/FA23B3Z4jQIC2RTTCzegNVeREz9GcwGfVyI8YmQOW9gcj6XnrWdayiqEheH7QCjNC8VB7SS/Pytg32c7fTazLTsLRyeWuIDz1QIFDEdJvg8s9C/TjNacHDouhWzKBnIwhnSlFpyFI3H+F/MVVdqA46XD/kgvwQYeTqsxx/micUIRTtVXN09JV0SjnJeV5+UI+BhlVHkGsRzBD2dJYqp/ckmdE/RX5tr1xKGFKjUnK0lyz+1mDc0weqGjagf6j+wDlg==";s:9:"signature";s:40:"dbbf889a23e720bfab5edbb07ef2fb31be86b3f6";s:2:"iv";s:24:"7blTilWs8PCbLeP1M3PjyA==";s:7:"rawData";s:247:"{"nickName":"KAZUKI","gender":1,"language":"zh_CN","city":"广州","province":"广东","country":"中国","avatarUrl":"https://wx.qlogo.cn/mmopen/vi_32/KUwFGLsK1MHqg2kDJkJCWY5rMbPP0hZZqzXZcBa0WLYoc9szTmPSuYrKv5FbHOOg1xv40sqYFaibiaFzT6ibte1Ag/132"}";},微信获取openid结果:a:2:{s:11:"session_key";s:24:"yRhjlwu4fTeVd0arZ9KTSQ==";s:6:"openid";s:28:"";} [2018-12-12 10:18:36]用户信息合法,暂时记录用以调试。接收到的参数:a:9:{s:4:"sign";s:0:"";s:1:"t";s:10:"1544581115";s:1:"v";s:2:"10";s:4:"code";s:32:"033dfteH1V3rQ00850eH1tUjeH1dfteG";s:4:"type";s:1:"1";s:13:"encryptedData";s:536:"";s:9:"signature";s:40:"f0a032dadfcea3108bfb000f8e2d4b39a31458a1";s:2:"iv";s:24:"Zh8RDbkFYQk0WGhY4qbyWQ==";s:7:"rawData";s:247:"{"nickName":"KAZUKI","gender":1,"language":"zh_CN","city":"广州","province":"广东","country":"中国","avatarUrl":"https://wx.qlogo.cn/mmopen/vi_32/KUwFGLsK1MHqg2kDJkJCWY5rMbPP0hZZqzXZcBa0WLYoc9szTmPSuYrKv5FbHOOg1xv40sqYFaibiaFzT6ibte1Ag/132"}";}微信获取openid结果:a:2:{s:11:"session_key";s:24:"yrsUI7duBqMFj6Qk7vYFjg==";s:6:"openid";s:28:"oJ2Li5FqGVwfb9idWmfCD-C-VOG4";} [2018-12-12 10:19:41]用户信息合法,暂时记录用以调试。接收到的参数:a:9:{s:4:"sign";s:0:"";s:1:"t";s:10:"1544581181";s:1:"v";s:2:"10";s:4:"code";s:32:"033wCPXX1D9CZ01ZrCYX14aVXX1wCPXt";s:4:"type";s:1:"1";s:13:"encryptedData";s:536:"";s:9:"signature";s:40:"f0a032dadfcea3108bfb000f8e2d4b39a31458a1";s:2:"iv";s:24:"2LDZs+Zz5UMchNnajuLdRQ==";s:7:"rawData";s:247:"{"nickName":"KAZUKI","gender":1,"language":"zh_CN","city":"广州","province":"广东","country":"中国","avatarUrl":"https://wx.qlogo.cn/mmopen/vi_32/KUwFGLsK1MHqg2kDJkJCWY5rMbPP0hZZqzXZcBa0WLYoc9szTmPSuYrKv5FbHOOg1xv40sqYFaibiaFzT6ibte1Ag/132"}";}微信获取openid结果:a:2:{s:11:"session_key";s:24:"yrsUI7duBqMFj6Qk7vYFjg==";s:6:"openid";s:28:"";} [2018-12-12 10:53:33]用户信息不合法,请重新登录。errcode:-41003,接收到的参数:a:9:{s:4:"sign";s:0:"";s:1:"t";s:10:"1544583212";s:1:"v";s:2:"10";s:4:"code";s:32:"033Tpt4C0VUlBi2Xbj3C0PDI4C0Tpt4Z";s:4:"type";s:1:"1";s:13:"encryptedData";s:536:"OAYRzLvjj0sKrFUmfzShZEbN22/B1kV3pScdkVRi7/rPKue7WZAuWrB251+I376/jq1WqJXBpPOTocTn6RAfAxWavtM5DEtbm4Ba5IFvxf2F2LTFZ+v1ijoeEZHlYNSmEuz7eyNceYDjdqdMBh6gD/wGFvBxnMnVIvMj/jvzR7iRO7inU8t245nw5AcObaHavQLj1xD/zd8KRzyOqDC1LqP8FSvwlg/pB180vZZzGeZ5E+ppW/fjudqdc9DWyI/bcAlbfvUpTsqB4NkRQR8MpzmKC+qYWXc0V7dM8QZSVgWHYfol2+YIzg5kPoyGvXoHx/+dnNAE3ezAJTw5DEKJZlDcTvExkBrwHL4MVsImUkBqLJnyF8GiY2oouwhfiV/YwaVKaiY3dE0+4wUphEE/Wa2a7HFtAb7Mn1iRQ6AlD6rJzubnXhHqGYQ+BdtLG0Ba1ajJniAWqqjVDhExpMZ78KXVCmQV7yMueBDn6CBp754q4caWVuTlmMvMFQhSnA8HHjqL5ZbHgCddl9koPP+NEg==";s:9:"signature";s:40:"f0a032dadfcea3108bfb000f8e2d4b39a31458a1";s:2:"iv";s:24:"bHq9jOZsvlXL0awzxvtRww==";s:7:"rawData";s:247:"{"nickName":"KAZUKI","gender":1,"language":"zh_CN","city":"广州","province":"广东","country":"中国","avatarUrl":"https://wx.qlogo.cn/mmopen/vi_32/KUwFGLsK1MHqg2kDJkJCWY5rMbPP0hZZqzXZcBa0WLYoc9szTmPSuYrKv5FbHOOg1xv40sqYFaibiaFzT6ibte1Ag/132"}";},微信获取openid结果:a:2:{s:11:"session_key";s:24:"SKAfN8Ndwr3S43m5MsWhRg==";s:6:"openid";s:28:"";}
小程序登录第一次总是会失败,第二次肯定成功pad block corrupted- 当前 Bug 的表现(可附上截图) 看了一整天,也没找到合适的答案,现在的问题是,开发版每次登录都要登录2次,2次后重新登录都是直接登录成功,间隔一段时间后再登录又要登录2次,正式版出现这个异常情况很少。 看来数据,出现这个问题的时候session_key都是一样的,也就是说第二次也是一样的session_key能登录成功,第一次就不能,不懂为什么? 请求顺序是小程序wx.login,取到了code,iv和encryptedData,连续请求每次都是不一样的,然后使用appid和secret获取session_key、openid等信息,每次连续请求获取的session_key都是一样的。 javax.crypto.BadPaddingException: pad block corrupted at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$BufferedGenericBlockCipher.doFinal(Unknown Source) at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(Unknown Source) at javax.crypto.Cipher.doFinal(Cipher.java:2164) at com.xmz1.util.wx.login.WxLoginUtils.getUserInfo(WxLoginUtils.java:64) at com.xmz1.mall.service.base.impl.UserServiceImpl.login(UserServiceImpl.java:107) at com.xmz1.mall.controller.base.UserController.login(UserController.java:42) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [图片] 红框是出现异常的地方 [图片] [图片]
2018-12-12我也遇到微信返回的signture和计算出来的signture不一致的情况。 不过我看了一下记录的日志,似乎是微信的session_key刷新后返回的签名就会出现这种情况。(还没最终确定是否这个触发条件)
小程序wx.getUserInfo接口出问题了我想获取用户基本信息,先是用wx.login获得code,再用code获得session_key,然后小程序用wx.getUserInfo接口返回了rawData和signature、encryptedData,然而在后台通过sha1加密签名(rawData+session_key)与signature进行加密检验的时候,发现有部分用户校验失败的,经排查发现如果用户微信昵称带emoji表情符号的时候就会出问题,以前一直登录的时候不会有这种情况,我就想问一下是不是你们这边改接口导致签名所用到的参数有问题???
2018-12-12